Introducing PackageManagement in Windows 10

In Windows 10 we are launching a new PackageManagement feature (formerly referred to as OneGet) that enables ITPros or DevOps to automate software discovery, installation, and inventory (SDII), locally or remotely, no matter what the installer technology is and where the software is located. 

So why are we implementing PackageManagement? In the Linux world, people are familiar with package managers such as Apt-Get, YUM, RPM, etc, for different Linux distros. In the Windows world, however, there are quite a few installer technologies, each having their own way to install software, such as MSI, MSU, APPX, and the list goes on and on. This creates a challenge for ITPros and DevOps and a need for a tool to automate the software deployment experience. PackageManagement is aimed at solving this problem. Let’s first have a glance at the architecture.

 

Architecture

PackageManagement is essentially a Package Management Aggregator. It creates a unified and consistent PowerShell interface for users and provides a plug-in model at the back end that different installer technologies or package managers can plug-in as providers, using PackageManagement APIs. Each provider further manages one or multiple package sources (repositories) where software packages are stored.

Regardless of the installation technology underneath, users can use these common cmdlets to install/uninstall packages, add/remove/query package repositories, which we call Package Sources, and query a system for the software installed.

 

 What’s in the box?

In the box, we will have

  • PackageManagement Core component,

  • a PowerShell module to provide cmdlets, and

  • a key set of providers. 

That’s it, all other providers can be installed on the fly. This allows for a small footprint while not losing agility to dynamically bootstrap package providers and install packages from those providers.

The key set of providers coming in the box are:

  • a Bootstrap provider (the provider that knows where to get more providers from)
  • an MSI provider for handling MSI files
  • an MSU provider for handling Microsoft update files
  • an Programs provider (Add/Remove programs) for providing inventory data of anything that registered itself with Add/Remove programs
  • PowerShellGet -- for accessing PowerShell modules.

 

Quick Start

Let’s explore what PackageManagement can offer you. A handy Get-Command is a good start.

You can see that we provide three levels of management, i.e. provider, package source, and package. The cmdlets are pretty much self-explained. We are particularly interested at the Package level operations, so let’s explore further on the SDII operations.

Discover Packages

This will look at all package sources for the provider PSModule and return all the versions matching the package name.

Install Packages

Once you find the package, you can simply specify the version without specifying a package source and PackageManagement will install that version of package from the correct package source.

Inventory

You can specify the –provider parameter at Cmdlet get-package to check what’s installed in the local machine. There is a special provider Programs included. With –IncludeWindowsInstaller option, it returns a superset of packages comparing to the Add-and-Remove Program, which only lists those ‘volunteering’ registered MSI packages.

 

Where to get it for down-level platforms

Besides Win10, PackageManagement is available for down level platforms in a few ways:

  • It is included in the Windows Management Frameworks 5.0 (WMF 5.0) Preview that supports back to Windows 7 and Windows Server 2008 R2. WMF 5.0 also contains PowerShell 5.0, DSC, and other components. 

  • For users who only want PackageManagement, we will soon release a stable version of just PackageManagement and PowerShellGet provider as a MSI package, and plan to refresh it frequently.

PackageManagement is also an open source project at https://github.com/OneGet. You can check out the latest news and code from there.

Comments

  • Anonymous
    January 01, 2003
    Why so long and unfriendly for non-english speakers name? What was wrong with OneGet?
  • Anonymous
    April 28, 2015
    nice
    thanks
  • Anonymous
    April 28, 2015
    Has the download been pulled?
  • Anonymous
    April 29, 2015
    Is there any way to use this without PowerShell? I typically avoid PowerShell because it never "just works" - there is always some configuration to do in order to be able to do normal things like executing scripts (e.g. Set-ExecutionPolicy).
  • Anonymous
    April 29, 2015
    The comment has been removed
  • Anonymous
    April 29, 2015
    Count on MS to not do it right.

    And with Linux, Docker, and Mezos, things are getting very interesting on the Big Data side of stuff. MS tech is just tiring to work against, having little of the 'cool toys'. They only reason they are relevant on the business side is because of Office, Exchange, and Sharepoint. And even that is just... boring.

    -- Linux user/dev for last 14 years, O365 / Shibboleth integrator
  • Anonymous
    April 29, 2015
    Nevermind, I just have no idea what I'm doing with Powershell.

    /hurp derp
  • Anonymous
    April 29, 2015
    @WayneB

    PowerShell was a badly implemented afterthought that Microsoft bolted on a GUI. No wonder it's for the dogs.

    And frankly, what do you expect? Even if you're a professional, crummy tools make for bad results.
  • Anonymous
    April 29, 2015
    @Ted : It will likely work like Chocolatey or the *nix repos; mods have full control and monitoring of the repos. What happens in the Enterprise is a local repo that gets copies from other repos, as per your software admin(s).

    @WayneB : If the ExecutionPolicy is your only problem, set it via GPO. Or double up with psexec to set the policy then run the script, and reset the policy back if you're worried about security.
  • Anonymous
    April 29, 2015
    The comment has been removed
  • Anonymous
    April 29, 2015
    @Josh, you must be talking about Powershell v1.0. Try anything after that, as it's MUCH better. Version 2 was when it became a fully-fledged shell, just as useful as bash (this is coming from a 15-year linux admin).
  • Anonymous
    April 29, 2015
    The comment has been removed
  • Anonymous
    April 29, 2015
    The comment has been removed
  • Anonymous
    April 29, 2015
    Is there an 'update' or 'upgrade' part yet for upgrading installed packages?
  • Anonymous
    April 30, 2015
    are there any plans to get w10 package manager to handle dependencies, like apt and yum?
  • Anonymous
    April 30, 2015
    The comment has been removed
  • Anonymous
    April 30, 2015
    WMF 5.0 installs don't seem to be working for 2008
  • Anonymous
    April 30, 2015
    LOL at all the seriously ignorant comments here. Astounding actually.
  • Anonymous
    May 12, 2015
    I just installed Build 10074. I added the Chocolatey provider and I can find packages, but I can't actually install anything. For example:

    PS C:Windowssystem32> find-package stylecop

    Name Version Source Summary
    ---- ------- ------ -------
    stylecop 4.7 chocolatey StyleCop

    However, trying to do install-package stylecop returns almost instantly with no errors. However, looking in Add/Remove Programs, StyleCop is not there. What gives?
  • Anonymous
    May 18, 2015
    sweet :)
  • Anonymous
    May 27, 2015
    Hi ExitedButConfused. I ran this from an admin shell:
    Find-Package google-chrome-x64 | Install-Package -Verbose -Force

    And that worked out just fine! Hope it works for you
  • Anonymous
    June 02, 2015
    The comment has been removed
  • Anonymous
    June 12, 2015
    Christopher Warner - check out my helper for getting WMF 5 onto Server 2008 R2 and Windows 7:http://www.csi-windows.com/blog/all/74-powershell/445-getting-powershell-5-april-preview-5010105-running-windows-7-and-server-2008-r2-some-assembly-required
  • Anonymous
    August 04, 2015
    Apt-Get for Windows - OneGet and Chocolatey on Windows 10
  • Anonymous
    August 05, 2015
    The comment has been removed
  • Anonymous
    August 06, 2015
    Does this actually work on Windows 10 yet? It just seems to download the package files but only downloads them to c:Chocolatey directory.

    Does this happen for everyone or just me??
  • Anonymous
    August 06, 2015
    Let me be more precise...I typed: install-package vlc

    returns with:
    The packages come from a package source that is not marked as trusted.
    Are you sure you want to install softwae from 'chocolatey'? I select yes and then
    it pauses for about 3 seconds and then returns...

    Name version source summary
    --------- ---------- --------- -------------
    vlc 2.2.1.20150630 chocolatey VLC Media Player

    But doesn't actually install it. It downloads it to c:/Chocolatey/lib/vlc.2.2.1.20150630

    There's a directory 'tools' and a file named vlc.2.2.1.20150630.nupkg
    Inside 'tools' is 'chocolateyInstall.ps1'

    I don't think it's downloading the actual program or installing it. Is that happening for everyone or just me?
  • Anonymous
    August 06, 2015
    Nevermind...I got it to work...first you have to enable scripts bypass with: Set-ExecutionPolicy Bypass

    Then it installed everything fine.
  • Anonymous
    September 28, 2015
    I-Like-Typing-Camel-Case-And-Dashes-Just-To-Make-Sure-Its-Really-Awesome!
  • Anonymous
    November 19, 2015
    Introduce Windows Server Apps (WSAs), based on APPX, to package and install an application on Nano Server.
  • Anonymous
    November 19, 2015
    Hands on Packaging and Installing WSAs to Nano Server.
  • Anonymous
    February 15, 2016
    On my two Windows 10 environments I find that C:Program FilesPackageManagement contains just one empty folder: ProviderAssemblies. And I'm out of luck installing it today due to this error message from PowerShell:

    NuGet-anycpu.exe is required to continue.
    PowerShellGet requires NuGet-anycpu.exe to interact with NuGet based galleries. NuGet-anycpu.exe must be available in 'C:Program
    FilesPackageManagementProviderAssemblies' or 'C:Usersdavid-nobleAppDataLocalPackageManagementProviderAssemblies'. For more
    information about NuGet provider, see http://OneGet.org/NuGet.html. Do you want PowerShellGet to download NuGet-anycpu.exe now?
    [Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y
    WARNING: Unable to download the list of available providers. Check your internet connection.
    WARNING: Unable to find package provider 'NuGet'.
    Install-NuGetClientBinaries : NuGet-anycpu.exe is required to interact with NuGet based galleries. Please ensure that NuGet-anycpu.exe is
    available under 'C:Program FilesPackageManagementProviderAssemblies' or
    'C:Usersdavid-nobleAppDataLocalPackageManagementProviderAssemblies'.
    At C:Program FilesWindowsPowerShellModulesPowerShellGetPSGet.psm1:946 char:9
    + Install-NuGetClientBinaries
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [Install-NuGetClientBinaries], InvalidOperationException
    + FullyQualifiedErrorId : CouldNotInstallNuGetBinaries,Install-NuGetClientBinaries

    WARNING: Unable to download the list of available providers. Check your internet connection.
    WARNING: Unable to find module provider 'NuGet'.
    WARNING: The specified PackageManagement provider 'NuGet' is not available.
    PackageManagementInstall-Package : No match was found for the specified search criteria and module name 'NTFSSecurity'.
    At C:Program FilesWindowsPowerShellModulesPowerShellGetPSGet.psm1:993 char:21
    + ... $null = PackageManagementInstall-Package @PSBoundParameters
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ObjectNotFound: (Microsoft.Power....InstallPackage:InstallPackage) [Install-Package], Exception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage

    Others on the internet report similar problems, but there's no solution for me today. Let me know when OneGet can actually get anything by default on Windows 10.
  • Anonymous
    February 26, 2016
    PS C:UsersJosh> Import-Module PackageManagement
    Import-Module : The specified module 'PackageManagement' was not loaded because no valid module file was found in any
    module directory.

    Was this removed after RTM?