Skip to content

Allow multiple apps to be installed using a single command #219

Closed

Description

@brunovieira97

Description of the new feature/enhancement

Let us call winget install with a list of apps, so it'll install them at the same time OR in sequence.

Proposal for command: winget install app-1 app-2 app-3

Activity

  1. shawnwildermuth commented on May 20, 2020

    @shawnwildermuth

    Or via config file like Chocolatey (e.g. packages.config)

  2. masx200 commented on May 24, 2020

    @masx200

    I support it!

  3. added this to the milestone on May 28, 2020
  4. denelon commented on Aug 19, 2020

    @denelon
    Collaborator

    This is not the same thing as #156

  5. modified the milestones: , on Aug 24, 2020
  6. brunovieira97 commented on May 3, 2021

    @brunovieira97
    Author

    Demitrius Nelon (@denelon) Bruno (@brunovieira97)

    managing multiple apps in a single command should be supported for all commands , not install only but for list / upgrade / uninstall too.

    I definitely agree with you! At least uninstall should be covered as well for feature parity between installation and removal process of an app. But implementing this for upgrade too would be very much welcome!

  7. modified the milestones: , , , on May 3, 2021
  8. sanamhub commented on Oct 6, 2021

    @sanamhub

    I upvote (support) for this issue!

    This is extremely needed thing 🚀

  9. 13 remaining items

  10. moved this from In Progress to Done in WinGeton Feb 6, 2023
  11. emoxam commented on Feb 7, 2023

    @emoxam

    When and how ill we get the new release ?

  12. sanamhub commented on Feb 7, 2023

    @sanamhub

    When and how ill we get the new release ?

    This feature will land in v1.5 which is Due by April 30, 2023
    For more: https://github.com/microsoft/winget-cli/milestone/39

  13. emoxam commented on Feb 7, 2023

    @emoxam

    This feature will land in v1.5 which is Due by April 30, 2023
    For more: https://github.com/microsoft/winget-cli/milestone/39

    And if i joined the Windows Package Manager Insider program?

  14. sanamhub commented on Feb 7, 2023

    @sanamhub

    And if I joined the Windows Package Manager Insider program?

    I think this is it: https://devblogs.microsoft.com/commandline/windows-package-manager-preview/

  15. emoxam commented on Feb 7, 2023

    @emoxam
  16. denelon commented on Feb 7, 2023

    @denelon
    Collaborator

    We're looking to cut another preview in the next week or two. It will show up in the releases as a "preview" and it will be published to Windows Insider Dev.

  17. jo-chemla commented on Sep 7, 2023

    @jo-chemla

    The below winget command do work for winget install-ing multiple packages at once via their ids.
    As pointed above by Demitrius Nelon (@denelon) Bruno (@brunovieira97) and others, it would also be great to support multiple package ids for uninstall and maybe upgrade commands, for feature parity.

    winget install package-id-1 package-id-2 --accept-package-agreements --accept-source-agreements
    
  18. florelis commented on Sep 7, 2023

    @florelis
    Member

    Jonathan Chemla (@jo-chemla) uninstall and upgrade already support multiple IDs. It was all part of the same change as multiple IDs for install

  19. jo-chemla commented on Sep 8, 2023

    @jo-chemla

    Indeed, I was using the same arguments for install and uninstall --disable-interactivity --accept-package-agreements --accept-source-agreements although uninstall does not support --accept-package-agreements (which makes sense). Great to hear!

  20. JasonCraneAdkins commented on Jun 24, 2025

    @JasonCraneAdkins

    And how does this work with the integrated Powershell module

    Example:
    install-wingetpackage JiriPolasek.ColorsforCommandPalette JiriPolasek.DevNumbersforCommandPalette
    Error Message:
    Install-WinGetPackage: No packages matched the given input criteria.

  21. beedell-roke commented on Jun 24, 2025

    @beedell-roke

    #219 (comment)

    JasonCraneAdkins, have you tried passing an array to -ID, like -ID @('JiriPolasek.ColorsforCommandPalette', 'JiriPolasek.DevNumbersforCommandPalette')? If not, I'd say post Get-Error's CLIXML to a new Q&A discussion.

  22. JasonCraneAdkins commented on Jun 24, 2025

    @JasonCraneAdkins

    Now i Did.

    Here is the output

    `
    #> install-wingetpackage -id @('JiriPolasek.MediaControlsforCommandPalet','JiriPolasek.RecentFilesforCommandPalette')

    Install-WinGetPackage: Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Id'. Specified method is not supported.

    #> get-error

    Exception :
    Type : System.Management.Automation.ParameterBindingException
    Message : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Id'. Specified method is not supported.
    ParameterName : Id
    ParameterType : [System.String]
    TypeSpecified : [System.Object[]]
    ErrorId : CannotConvertArgument
    Line : 1
    Offset : 27
    CommandInvocation :
    MyCommand : Install-WinGetPackage
    ScriptLineNumber : 1
    OffsetInLine : 1
    HistoryId : 35
    Line : install-wingetpackage -id @('JiriPolasek.MediaControlsforCommandPalet','JiriPolasek.RecentFilesforCommandPalette')
    Statement : install-wingetpackage -id @('JiriPolasek.MediaControlsforCommandPalet','JiriPolasek.RecentFilesforCommandPalette')
    PositionMessage : At line:1 char:1
    + install-wingetpackage -id @('JiriPolasek.MediaControlsforCommandPalet …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    InvocationName : install-wingetpackage
    PipelineLength : 1
    PipelinePosition : 1
    ErrorRecord :
    Exception :
    Type : System.Management.Automation.ParentContainsErrorRecordException
    Message : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Id'. Specified method is not supported.
    HResult : -2146233087
    CategoryInfo : InvalidArgument: (:) [Install-WinGetPackage], ParentContainsErrorRecordException
    FullyQualifiedErrorId : CannotConvertArgument,Microsoft.WinGet.Client.Commands.InstallPackageCmdlet
    InvocationInfo :
    MyCommand : Install-WinGetPackage
    ScriptLineNumber : 1
    OffsetInLine : 27
    HistoryId : 35
    Line : install-wingetpackage -id @('JiriPolasek.MediaControlsforCommandPalet','JiriPolasek.RecentFilesforCommandPalette')
    Statement : @('JiriPolasek.MediaControlsforCommandPalet','JiriPolasek.RecentFilesforCommandPalette')
    PositionMessage : At line:1 char:27
    + … package -id @('JiriPolasek.MediaControlsforCommandPalet','JiriPolasek …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    CommandOrigin : Internal
    ScriptStackTrace : at , : line 1
    TargetSite :
    Name : CoerceTypeAsNeeded
    DeclaringType : [System.Management.Automation.ParameterBinderBase]
    MemberType : Method
    Module : System.Management.Automation.dll
    Data : System.Collections.ListDictionaryInternal
    InnerException :
    Type : System.NotSupportedException
    TargetSite :
    Name : CoerceTypeAsNeeded
    DeclaringType : [System.Management.Automation.ParameterBinderBase]
    MemberType : Method
    Module : System.Management.Automation.dll
    Message : Specified method is not supported.
    Source : System.Management.Automation
    HResult : -2146233067
    StackTrace :
    at System.Management.Automation.ParameterBinderBase.CoerceTypeAsNeeded(CommandParameterInternal argument, String parameterName, Type toType, ParameterCollectionTypeInformation collectionTypeInfo, Object currentValue)
    Source : System.Management.Automation
    HResult : -2146233087
    StackTrace :
    at System.Management.Automation.ParameterBinderBase.CoerceTypeAsNeeded(CommandParameterInternal argument, String parameterName, Type toType, ParameterCollectionTypeInformation collectionTypeInfo, Object currentValue)
    at System.Management.Automation.ParameterBinderBase.BindParameter(CommandParameterInternal parameter, CompiledCommandParameter parameterMetadata, ParameterBindingFlags flags)
    at System.Management.Automation.CmdletParameterBinderController.BindParameter(CommandParameterInternal argument, MergedCompiledCommandParameter parameter, ParameterBindingFlags flags)
    at System.Management.Automation.CmdletParameterBinderController.BindParameter(UInt32 parameterSets, CommandParameterInternal argument, MergedCompiledCommandParameter parameter, ParameterBindingFlags flags)
    at System.Management.Automation.CmdletParameterBinderController.BindNamedParameter(UInt32 parameterSets, CommandParameterInternal argument, MergedCompiledCommandParameter parameter)
    at System.Management.Automation.ParameterBinderController.BindNamedParameters(UInt32 parameterSets, Collection1 arguments) at System.Management.Automation.CmdletParameterBinderController.BindCommandLineParametersNoValidation(Collection1 arguments)
    at System.Management.Automation.CmdletParameterBinderController.BindCommandLineParameters(Collection1 arguments) at System.Management.Automation.CommandProcessor.BindCommandLineParameters() at System.Management.Automation.CommandProcessor.Prepare(IDictionary psDefaultParameterValues) at System.Management.Automation.CommandProcessorBase.DoPrepare(IDictionary psDefaultParameterValues) at System.Management.Automation.Internal.PipelineProcessor.Start(Boolean incomingStream) at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input) --- End of stack trace from previous location --- at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input) at System.Management.Automation.PipelineOps.InvokePipeline(Object input, Boolean ignoreInput, CommandParameterInternal[][] pipeElements, CommandBaseAst[] pipeElementAsts, CommandRedirection[][] commandRedirections, FunctionContext funcContext) at System.Management.Automation.Interpreter.ActionCallInstruction6.Run(InterpretedFrame frame)
    at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
    CategoryInfo : InvalidArgument: (:) [Install-WinGetPackage], ParameterBindingException
    FullyQualifiedErrorId : CannotConvertArgument,Microsoft.WinGet.Client.Commands.InstallPackageCmdlet
    InvocationInfo :
    MyCommand : Install-WinGetPackage
    ScriptLineNumber : 1
    OffsetInLine : 27
    HistoryId : 35
    Line : install-wingetpackage -id @('JiriPolasek.MediaControlsforCommandPalet','JiriPolasek.RecentFilesforCommandPalette')
    Statement : @('JiriPolasek.MediaControlsforCommandPalet','JiriPolasek.RecentFilesforCommandPalette')
    PositionMessage : At line:1 char:27
    + … package -id @('JiriPolasek.MediaControlsforCommandPalet','JiriPolasek …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    CommandOrigin : Internal
    ScriptStackTrace : at , : line 1`

  23. beedell-roke commented on Jun 24, 2025

    @beedell-roke

    #219 (comment)

    JasonCraneAdkins, I explicitly suggested that you discuss this in a new Q&A for a reason – until you've confirmed that you've located a bug, it's not worth filing an issue for, and even if you knew it was, it would be a separate issue to this, since the scope is the PowerShell module's translation later.

    I still suggest that you re-file this there, asking whether this is possible, and if so, how. When you do, please link it here, and I'll try to assist.

    Though, I can't easily assist you, because that log is unreadable: you need to render it with semantic markup. I suggest that you read the Markdown basics on fenced code blocks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    In-PRIssue related to a PRIssue-FeatureThis is a feature request for the Windows Package Manager client.

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions