Welcome to the Chocolatey Community Package Repository! The packages found in this section of the site are provided, maintained, and moderated by the community.
Moderation
Every version of each package undergoes a rigorous moderation process before it goes live that typically includes:
- Security, consistency, and quality checking
- Installation testing
- Virus checking through VirusTotal
- Human moderators who give final review and sign off
More detail at Security and Moderation.
Organizational Use
If you are an organization using Chocolatey, we want your experience to be fully reliable. Due to the nature of this publicly offered repository, reliability cannot be guaranteed. Packages offered here are subject to distribution rights, which means they may need to reach out further to the internet to the official locations to download files at runtime.
Fortunately, distribution rights do not apply for internal use. With any edition of Chocolatey (including the free open source edition), you can host your own packages and cache or internalize existing community packages.
Disclaimer
Your use of the packages on this site means you understand they are not supported or guaranteed in any way. Learn more...
-
STEP1
Package Review
-
STEP2
Integration Method
-
STEP3
Internal Repo Url
-
STEP4
Environment Setup
-
STEP5
Install Script
Step 1: Review Your Packages
Step 2: Choose Your Integration Method
Step 3: Enter Your Internal Repository Url
(this should look similar to https://community.chocolatey.org/api/v2/)
Step 3: Copy Your Script or Download Config
Option 1: Copy Script
Option 2: Download Config
Step 4: Setup Your Environment
1. Ensure you are set for organizational deployment
Please see the organizational deployment guide
2. Get the package into your environment
Option 1: Cached Package (Unreliable, Requires Internet - Same As Community)-
Open Source or Commercial:
- Proxy Repository - Create a proxy nuget repository on Nexus, Artifactory Pro, or a proxy Chocolatey repository on ProGet. Point your upstream to https://community.chocolatey.org/api/v2/. Packages cache on first access automatically. Make sure your choco clients are using your proxy repository as a source and NOT the default community repository. See source command for more information.
-
You can also just download the packages and push them to a repository
Download Packages
-
Open Source
-
Download the packages:
Download Packages - Follow manual internalization instructions
-
-
Package Internalizer (C4B)
-
Run: (additional options)
-
For package and dependencies run:
- Automate package internalization
-
Run: (additional options)
Step 5: Copy Your Script
See options you can pass to upgrade.
See best practices for scripting.
Add this to a PowerShell script or use a Batch script with tools and in places where you are calling directly to Chocolatey. If you are integrating, keep in mind enhanced exit codes.
If you do use a PowerShell script, use the following to ensure bad exit codes are shown as failures:
## 1. REQUIREMENTS ##
### Here are the requirements necessary to ensure this is successful.
### a. Internal/Private Cloud Repository Set Up ###
#### You'll need an internal/private cloud repository you can use. These are
#### generally really quick to set up and there are quite a few options.
#### Chocolatey Software recommends Nexus, Artifactory Pro, or ProGet as they
#### are repository servers and will give you the ability to manage multiple
#### repositories and types from one server installation.
### b. Download Chocolatey Package and Put on Internal Repository ###
#### You need to have downloaded the Chocolatey package as well.
#### Please see https://chocolatey.org/install#organization
### c. Other Requirements ###
#### We initialize a few things that are needed by this script - there are no other requirements.
$ErrorActionPreference = "Stop"
#### Set TLS 1.2 (3072) as that is the minimum required by various up-to-date repositories.
#### Use integers because the enumeration value for TLS 1.2 won't exist
#### in .NET 4.0, even though they are addressable if .NET 4.5+ is
#### installed (.NET 4.5 is an in-place upgrade).
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
#### We use this variable for future REST calls.
$RequestArguments = @{
UseBasicParsing = $true
}
## 2. TOP LEVEL VARIABLES ##
### a. Your internal repository url (the main one). ###
#### Should be similar to what you see when you browse
#### to https://community.chocolatey.org/api/v2/
$NugetRepositoryUrl = "INTERNAL REPO URL"
### b. Internal Repository Credential ###
#### If required, add the repository access credential here
# $NugetRepositoryCredential = [PSCredential]::new(
# "username",
# ("password" | ConvertTo-SecureString -AsPlainText -Force)
# )
# $RequestArguments.Credential = $NugetRepositoryCredential
### c. Chocolatey nupkg download url ###
#### This url should result in an immediate download when you navigate to it
$ChocolateyDownloadUrl = "$($NugetRepositoryUrl.TrimEnd('/'))/package/chocolatey.1.1.0.nupkg"
### d. Chocolatey Central Management (CCM) ###
#### If using CCM to manage Chocolatey, add the following:
#### i. Endpoint URL for CCM
# $ChocolateyCentralManagementUrl = "https://chocolatey-central-management:24020/ChocolateyManagementService"
#### ii. If using a Client Salt, add it here
# $ChocolateyCentralManagementClientSalt = "clientsalt"
#### iii. If using a Service Salt, add it here
# $ChocolateyCentralManagementServiceSalt = "servicesalt"
## 3. ENSURE CHOCOLATEY IS INSTALLED ##
### Ensure Chocolatey is installed from your internal repository
#### Download the Nupkg, appending .zip to the filename to handle archive cmdlet limitations
if (-not (Get-Command choco.exe -ErrorAction SilentlyContinue)) {
$TempDirectory = Join-Path $env:Temp "chocolateyInstall"
if (-not (Test-Path $TempDirectory -PathType Container)) {
$null = New-Item -Path $TempDirectory -ItemType Directory
}
$DownloadedNupkg = Join-Path $TempDirectory "$(Split-Path $ChocolateyDownloadUrl -Leaf).zip"
Invoke-WebRequest -Uri $ChocolateyDownloadUrl -OutFile $DownloadedNupkg @RequestArguments
#### Extract the Nupkg, and run the chocolateyInstall script
if (Get-Command Microsoft.PowerShell.Archive\Expand-Archive -ErrorAction SilentlyContinue) {
Microsoft.PowerShell.Archive\Expand-Archive -Path $DownloadedNupkg -DestinationPath $TempDirectory -Force
} else {
# PowerShell versions <4.0 do not have this function available
try {
$shellApplication = New-Object -ComObject Shell.Application
$zipPackage = $shellApplication.NameSpace($DownloadedNupkg)
$destinationFolder = $shellApplication.NameSpace($TempDirectory)
$destinationFolder.CopyHere($zipPackage.Items(), 0x10)
} catch {
Write-Warning "Unable to unzip package using built-in compression."
throw $_
}
}
& $(Join-Path $TempDirectory "tools\chocolateyInstall.ps1")
}
if (-not (Get-Command choco.exe -ErrorAction SilentlyContinue)) {
refreshenv
}
## 4. CONFIGURE CHOCOLATEY BASELINE ##
### a. FIPS Feature ###
#### If you need FIPS compliance - make this the first thing you configure
#### before you do any additional configuration or package installations
# choco feature enable -n useFipsCompliantChecksums
### b. Apply Recommended Configuration ###
#### Move cache location so Chocolatey is very deterministic about
#### cleaning up temporary data and the location is secured to admins
choco config set --name cacheLocation --value C:\ProgramData\chocolatey\cache
#### Increase timeout to at least 4 hours
choco config set --name commandExecutionTimeoutSeconds --value 14400
#### Turn off download progress when running choco through integrations
choco feature disable --name showDownloadProgress
### c. Sources ###
#### Remove the default community package repository source
choco source list --limitoutput | ConvertFrom-Csv -Header 'Name', 'Location' -Delimiter '|' | ForEach-Object {
if ($_.Location -eq 'https://community.chocolatey.org/api/v2/') {
choco source remove -n $_.Name
}
}
#### Add internal default sources
#### You could have multiple sources here, so we will provide an example
#### of one using the remote repo variable here
#### NOTE: This EXAMPLE may require changes
if ($NugetRepositoryCredential) {
choco source add --name ChocolateyInternal --source $NugetRepositoryUrl --user $NugetRepositoryCredential.UserName --password $NugetRepositoryCredential.GetNetworkCredential().Password --priority 1
} else {
choco source add --name ChocolateyInternal --source $NugetRepositoryUrl --priority 1
}
### b. Keep Chocolatey Up To Date ###
#### Keep chocolatey up to date based on your internal source
#### You control the upgrades based on when you push an updated version
#### to your internal repository.
#### Note the source here is to the OData feed, similar to what you see
#### when you browse to https://community.chocolatey.org/api/v2/
choco upgrade chocolatey --confirm
## 5. ENSURE CHOCOLATEY FOR BUSINESS ##
### If you don't have Chocolatey for Business (C4B), you'll want to remove from here down.
### a. Ensure The License File Is Installed ###
#### Create a license package using script from https://docs.chocolatey.org/en-us/how-tos/setup-offline-installation#exercise-4-create-a-package-for-the-license
choco install chocolatey-license --source $NugetRepositoryUrl --confirm
### b. Disable The Licensed Source ###
#### The licensed source cannot be removed, so it must be disabled.
#### This must occur after the license has been set by the license package.
if ("chocolatey-license" -in (choco list --localonly --limitoutput | ConvertFrom-Csv -Header "Name" -Delimiter "|").Name) {
choco source disable --name chocolatey.licensed
} else {
Write-Warning "Not disabling 'chocolatey.licensed' feed, as Chocolatey-License has not been installed."
}
### c. Ensure Chocolatey Licensed Extension ###
#### You will have downloaded the licensed extension to your internal repository
#### as you have disabled the licensed repository in step 5b.
#### Ensure the chocolatey.extension package (aka Chocolatey Licensed Extension)
if ("chocolatey-license" -in (choco list --localonly --limitoutput | ConvertFrom-Csv -Header "Name" -Delimiter "|").Name) {
choco install chocolatey.extension --source $NugetRepositoryUrl --confirm
} else {
Write-Warning "Not installing 'chocolatey.extension', as Chocolatey-License has not been installed."
}
#### The Chocolatey Licensed Extension unlocks all of the following, which also have configuration/feature items available with them. You may want to visit the feature pages to see what you might want to also enable:
#### - Package Builder - https://docs.chocolatey.org/en-us/features/paid/package-builder
#### - Package Internalizer - https://docs.chocolatey.org/en-us/features/paid/package-internalizer
#### - Package Synchronization (3 components) - https://docs.chocolatey.org/en-us/features/paid/package-synchronization
#### - Package Reducer - https://docs.chocolatey.org/en-us/features/paid/package-reducer
#### - Package Audit - https://docs.chocolatey.org/en-us/features/paid/package-audit
#### - Package Throttle - https://docs.chocolatey.org/en-us/features/paid/package-throttle
#### - CDN Cache Access - https://docs.chocolatey.org/en-us/features/paid/private-cdn
#### - Branding - https://docs.chocolatey.org/en-us/features/paid/branding
#### - Self-Service Anywhere (more components will need to be installed and additional configuration will need to be set) - https://docs.chocolatey.org/en-us/features/paid/self-service-anywhere
#### - Chocolatey Central Management (more components will need to be installed and additional configuration will need to be set) - https://docs.chocolatey.org/en-us/features/paid/chocolatey-central-management
#### - Other - https://docs.chocolatey.org/en-us/features/paid/
### d. Ensure Self-Service Anywhere ###
#### If you have desktop clients where users are not administrators, you may
#### to take advantage of deploying and configuring Self-Service anywhere
choco feature disable --name showNonElevatedWarnings
choco feature enable --name useBackgroundService
choco feature enable --name useBackgroundServiceWithNonAdministratorsOnly
choco feature enable --name allowBackgroundServiceUninstallsFromUserInstallsOnly
choco config set --name allowedBackgroundServiceCommands --value "install,upgrade,uninstall"
### e. Ensure Chocolatey Central Management ###
#### If you want to manage and report on endpoints, you can set up and configure
### Central Management. There are multiple portions to manage, so you'll see
### a section on agents here along with notes on how to configure the server
### side components.
if ($ChocolateyCentralManagementUrl) {
choco install chocolatey-agent --source $NugetRepositoryUrl --confirm
choco config set --name CentralManagementServiceUrl --value $ChocolateyCentralManagementUrl
if ($ChocolateyCentralManagementClientSalt) {
choco config set --name centralManagementClientCommunicationSaltAdditivePassword --value $ChocolateyCentralManagementClientSalt
}
if ($ChocolateyCentralManagementServiceSalt) {
choco config set --name centralManagementServiceCommunicationSaltAdditivePassword --value $ChocolateyCentralManagementServiceSalt
}
choco feature enable --name useChocolateyCentralManagement
choco feature enable --name useChocolateyCentralManagementDeployments
}
See docs at https://docs.ansible.com/ansible/latest/modules/win_chocolatey_module.html.
If Applicable - Chocolatey Configuration/Installation
## 1. REQUIREMENTS ##
### Here are the requirements necessary to ensure this is successful.
### a. Internal/Private Cloud Repository Set Up ###
#### You'll need an internal/private cloud repository you can use. These are
#### generally really quick to set up and there are quite a few options.
#### Chocolatey Software recommends Nexus, Artifactory Pro, or ProGet as they
#### are repository servers and will give you the ability to manage multiple
#### repositories and types from one server installation.
### b. Download Chocolatey Package and Put on Internal Repository ###
#### You need to have downloaded the Chocolatey package as well.
#### Please see https://chocolatey.org/install#organization
### c. Other Requirements ###
#### i. chocolatey.chocolatey
##### You will require the chocolatey.chocolatey collection to be installed
##### on all machines using this playbook.
##### Please see https://github.com/chocolatey/chocolatey-ansible/#installing-the-collection-from-ansible-galaxy
- name: Install and Configure Chocolatey
hosts: all
## 2. TOP LEVEL VARIABLES ##
vars:
### a. Your internal repository url (the main one). ###
#### Should be similar to what you see when you browse
#### to https://community.chocolatey.org/api/v2/
nuget_repository_url: INTERNAL REPO URL
### b. Internal Repository Credential ###
#### If required, add the repository access credential here and
#### uncomment lines with source_username and source_password below
# nuget_repository_username: username
# nuget_repository_password: password
### c. Chocolatey Central Management (CCM) ###
#### If using CCM to manage Chocolatey, add the following:
#### i. Endpoint URL for CCM
# chocolatey_central_management_url: https://chocolatey-central-management:24020/ChocolateyManagementService
#### ii. If using a Client Salt, add it here
# chocolatey_central_management_client_salt: clientsalt
#### iii. If using a Service Salt, add it here
# chocolatey_central_management_service_salt: servicesalt
## 3. ENSURE CHOCOLATEY IS INSTALLED ##
### Ensure Chocolatey is installed from your internal repository
tasks:
- name: Install chocolatey
win_chocolatey:
name: chocolatey
source: {{ nuget_repository_url }}
# source_username: {{ nuget_repository_username }}
# source_password: {{ nuget_repository_password }}
## 4. CONFIGURE CHOCOLATEY BASELINE ##
### a. FIPS Feature ###
#### If you need FIPS compliance - make this the first thing you configure
#### before you do any additional configuration or package installations
# - name: Enable FIPS compliance
# win_chocolatey_feature:
# name: useFipsCompliantChecksums
# state: enabled
### b. Apply Recommended Configuration ###
#### Move cache location so Chocolatey is very deterministic about
#### cleaning up temporary data and the location is secured to admins
- name: Set the cache location
win_chocolatey_config:
name: cacheLocation
state: present
value: C:\ProgramData\chocolatey\cache
#### Increase timeout to at least 4 hours
- name: Set the command execution timeout
win_chocolatey_config:
name: commandExecutionTimeoutSeconds
state: present
value: 14400
#### Turn off download progress when running choco through integrations
- name: Disable showing download progress
win_chocolatey_feature:
name: showDownloadProgress
state: disabled
### c. Sources ###
#### Remove the default community package repository source
- name: Remove Chocolatey Community Repository
win_chocolatey_source:
name: chocolatey
state: absent
#### Add internal default sources
#### You could have multiple sources here, so we will provide an example
#### of one using the remote repo variable here
#### NOTE: This EXAMPLE may require changes
- name: Add Internal Repository
win_chocolatey_source:
name: ChocolateyInternal
state: present
source: {{ nuget_repository_url }}
# source_username: {{ nuget_repository_username }}
# source_password: {{ nuget_repository_password }}
priority: 1
### b. Keep Chocolatey Up To Date ###
#### Keep chocolatey up to date based on your internal source
#### You control the upgrades based on when you push an updated version
#### to your internal repository.
#### Note the source here is to the OData feed, similar to what you see
#### when you browse to https://community.chocolatey.org/api/v2/
- name: Upgrade Chocolatey
win_chocolatey:
name: chocolatey
state: latest
## 5. ENSURE CHOCOLATEY FOR BUSINESS ##
### If you don't have Chocolatey for Business (C4B), you'll want to remove from here down.
### a. Ensure The License File Is Installed ###
#### Create a license package using script from https://docs.chocolatey.org/en-us/how-tos/setup-offline-installation#exercise-4-create-a-package-for-the-license
- name: Install Chocolatey License
win_chocolatey:
name: chocolatey-license
source: ChocolateyInternal
state: latest
### b. Disable The Licensed Source ###
#### The licensed source cannot be removed, so it must be disabled.
#### This must occur after the license has been set by the license package.
- name: Disable Chocolatey Community Repository
win_chocolatey_source:
name: chocolatey.licensed
state: disabled
### c. Ensure Chocolatey Licensed Extension ###
#### You will have downloaded the licensed extension to your internal repository
#### as you have disabled the licensed repository in step 5b.
#### Ensure the chocolatey.extension package (aka Chocolatey Licensed Extension)
- name: Install Chocolatey Extension
win_chocolatey:
name: chocolatey.extension
source: ChocolateyInternal
state: latest
#### The Chocolatey Licensed Extension unlocks all of the following, which also have configuration/feature items available with them. You may want to visit the feature pages to see what you might want to also enable:
#### - Package Builder - https://docs.chocolatey.org/en-us/features/paid/package-builder
#### - Package Internalizer - https://docs.chocolatey.org/en-us/features/paid/package-internalizer
#### - Package Synchronization (3 components) - https://docs.chocolatey.org/en-us/features/paid/package-synchronization
#### - Package Reducer - https://docs.chocolatey.org/en-us/features/paid/package-reducer
#### - Package Audit - https://docs.chocolatey.org/en-us/features/paid/package-audit
#### - Package Throttle - https://docs.chocolatey.org/en-us/features/paid/package-throttle
#### - CDN Cache Access - https://docs.chocolatey.org/en-us/features/paid/private-cdn
#### - Branding - https://docs.chocolatey.org/en-us/features/paid/branding
#### - Self-Service Anywhere (more components will need to be installed and additional configuration will need to be set) - https://docs.chocolatey.org/en-us/features/paid/self-service-anywhere
#### - Chocolatey Central Management (more components will need to be installed and additional configuration will need to be set) - https://docs.chocolatey.org/en-us/features/paid/chocolatey-central-management
#### - Other - https://docs.chocolatey.org/en-us/features/paid/
### d. Ensure Self-Service Anywhere ###
#### If you have desktop clients where users are not administrators, you may
#### to take advantage of deploying and configuring Self-Service anywhere
- name: Hide not-elevated warnings
win_chocolatey_feature:
name: showNonElevatedWarnings
state: disabled
- name: Use background mode for self-service
win_chocolatey_feature:
name: useBackgroundService
state: enabled
- name: Use background service for non-admins
win_chocolatey_feature:
name: useBackgroundServiceWithNonAdministratorsOnly
state: enabled
- name: Allow background uninstallation for user installs
win_chocolatey_feature:
name: allowBackgroundServiceUninstallsFromUserInstallsOnly
state: enabled
- name: Set allowed background service commands
win_chocolatey_config:
name: backgroundServiceAllowedCommands
state: present
value: install,upgrade,uninstall
### e. Ensure Chocolatey Central Management ###
#### If you want to manage and report on endpoints, you can set up and configure
### Central Management. There are multiple portions to manage, so you'll see
### a section on agents here along with notes on how to configure the server
### side components.
- name: Install Chocolatey Agent
when: chocolatey_central_management_url is defined
win_chocolatey:
name: chocolatey-agent
source: ChocolateyInternal
state: latest
- name: Set the Central Management Service URL
when: chocolatey_central_management_url is defined
win_chocolatey_config:
name: CentralManagementServiceUrl
state: present
value: {{ chocolatey_central_management_url }}
- name: Set the Central Management Client Salt
when: chocolatey_central_management_client_salt is defined
win_chocolatey_config:
name: centralManagementClientCommunicationSaltAdditivePassword
state: present
value: {{ chocolatey_central_management_client_salt }}
- name: Set the Central Management Service Salt
when: chocolatey_central_management_service_salt is defined
win_chocolatey_config:
name: centralManagementServiceCommunicationSaltAdditivePassword
state: present
value: {{ chocolatey_central_management_service_salt }}
- name: Use Central Management
when: chocolatey_central_management_url is defined
win_chocolatey_feature:
name: useChocolateyCentralManagement
state: enabled
- name: Use Central Management Deployments
when: chocolatey_central_management_url is defined
win_chocolatey_feature:
name: useChocolateyCentralManagementDeployments
state: enabled
See docs at https://docs.chef.io/resource_chocolatey_package.html.
If Applicable - Chocolatey Configuration/Installation
## 1. REQUIREMENTS ##
### Here are the requirements necessary to ensure this is successful.
### a. Internal/Private Cloud Repository Set Up ###
#### You'll need an internal/private cloud repository you can use. These are
#### generally really quick to set up and there are quite a few options.
#### Chocolatey Software recommends Nexus, Artifactory Pro, or ProGet as they
#### are repository servers and will give you the ability to manage multiple
#### repositories and types from one server installation.
### b. Download Chocolatey Package and Put on Internal Repository ###
#### You need to have downloaded the Chocolatey package as well.
#### Please see https://chocolatey.org/install#organization
### c. Other Requirements ###
#### The Chocolatey resources are available with any recent version of Chef.
#### We utilise the Chocolatey recipe to install the Chocolatey binaries.
include_recipe "chocolatey"
## 2. TOP LEVEL VARIABLES ##
### a. Your internal repository url (the main one). ###
#### Should be similar to what you see when you browse
#### to https://community.chocolatey.org/api/v2/
NugetRepositoryUrl = "INTERNAL REPO URL"
### b. Internal Repository Credential ###
#### If required, add the repository access credential here
# NugetRepositoryUsername = "username"
# NugetRepositoryPassword = "password"
### c. Chocolatey nupkg download url ###
#### This url should result in an immediate download when you navigate to it in
#### a web browser
ChocolateyNupkgUrl = "INTERNAL REPO URL/package/chocolatey.1.1.0.nupkg",
### d. Chocolatey Central Management (CCM) ###
#### If using CCM to manage Chocolatey, add the following:
#### i. Endpoint URL for CCM
# ChocolateyCentralManagementUrl = "https://chocolatey-central-management:24020/ChocolateyManagementService"
#### ii. If using a Client Salt, add it here
# ChocolateyCentralManagementClientSalt = "clientsalt"
#### iii. If using a Service Salt, add it here
# ChocolateyCentralManagementServiceSalt = "servicesalt"
## 3. ENSURE CHOCOLATEY IS INSTALLED ##
### Ensure Chocolatey is installed from your internal repository
node['chocolatey']['install vars'] = {
'chocolateyDownloadUrl' => "#{ChocolateyNupkgUrl}",
}
## 4. CONFIGURE CHOCOLATEY BASELINE ##
### a. FIPS Feature ###
#### If you need FIPS compliance - make this the first thing you configure
#### before you do any additional configuration or package installations
# chocolatey_feature 'useFipsCompliantChecksums' do
# action :enable
# end
### b. Apply Recommended Configuration ###
#### Move cache location so Chocolatey is very deterministic about
#### cleaning up temporary data and the location is secured to admins
chocolatey_config 'cacheLocation' do
value 'C:\ProgramData\chocolatey\cache'
end
#### Increase timeout to at least 4 hours
chocolatey_config 'commandExecutionTimeoutSeconds' do
value '14400'
end
#### Turn off download progress when running choco through integrations
chocolatey_feature 'showDownloadProgress' do
action :disable
end
### c. Sources ###
#### Remove the default community package repository source
chocolatey_source 'chocolatey' do
action :remove
end
#### Add internal default sources
#### You could have multiple sources here, so we will provide an example
#### of one using the remote repo variable here
#### NOTE: This EXAMPLE may require changes
chocolatey_source 'ChocolateyInternal' do
source "#{NugetRepositoryUrl}"
priority 1
action :add
end
execute 'ChocolateyInternal' do
command "choco source add --name ChocolateyInternal -s #{NugetRepositoryUrl} -u=#{NugetRepositoryUsername} -p=#{NugetRepositoryPassword} --priority=1"
only_if { NugetRepositoryUsername != nil || NugetRepositoryPassword != nil }
end
### b. Keep Chocolatey Up To Date ###
#### Keep chocolatey up to date based on your internal source
#### You control the upgrades based on when you push an updated version
#### to your internal repository.
#### Note the source here is to the OData feed, similar to what you see
#### when you browse to https://community.chocolatey.org/api/v2/
chocolatey_package 'chocolatey' do
action :upgrade
source "#{NugetRepositoryUrl}"
end
## 5. ENSURE CHOCOLATEY FOR BUSINESS ##
### If you don't have Chocolatey for Business (C4B), you'll want to remove from here down.
### a. Ensure The License File Is Installed ###
#### Create a license package using script from https://docs.chocolatey.org/en-us/how-tos/setup-offline-installation#exercise-4-create-a-package-for-the-license
chocolatey_package 'chocolatey-license' do
action :install
source "#{NugetRepositoryUrl}"
end
### b. Disable The Licensed Source ###
#### The licensed source cannot be removed, so it must be disabled.
#### This must occur after the license has been set by the license package.
chocolatey_source 'chocolatey.licensed' do
action :disable
end
### c. Ensure Chocolatey Licensed Extension ###
#### You will have downloaded the licensed extension to your internal repository
#### as you have disabled the licensed repository in step 5b.
#### Ensure the chocolatey.extension package (aka Chocolatey Licensed Extension)
chocolatey_package 'chocolatey.extention' do
action install
source "#{NugetRepositoryUrl}"
end
#### The Chocolatey Licensed Extension unlocks all of the following, which also have configuration/feature items available with them. You may want to visit the feature pages to see what you might want to also enable:
#### - Package Builder - https://docs.chocolatey.org/en-us/features/paid/package-builder
#### - Package Internalizer - https://docs.chocolatey.org/en-us/features/paid/package-internalizer
#### - Package Synchronization (3 components) - https://docs.chocolatey.org/en-us/features/paid/package-synchronization
#### - Package Reducer - https://docs.chocolatey.org/en-us/features/paid/package-reducer
#### - Package Audit - https://docs.chocolatey.org/en-us/features/paid/package-audit
#### - Package Throttle - https://docs.chocolatey.org/en-us/features/paid/package-throttle
#### - CDN Cache Access - https://docs.chocolatey.org/en-us/features/paid/private-cdn
#### - Branding - https://docs.chocolatey.org/en-us/features/paid/branding
#### - Self-Service Anywhere (more components will need to be installed and additional configuration will need to be set) - https://docs.chocolatey.org/en-us/features/paid/self-service-anywhere
#### - Chocolatey Central Management (more components will need to be installed and additional configuration will need to be set) - https://docs.chocolatey.org/en-us/features/paid/chocolatey-central-management
#### - Other - https://docs.chocolatey.org/en-us/features/paid/
### d. Ensure Self-Service Anywhere ###
#### If you have desktop clients where users are not administrators, you may
#### to take advantage of deploying and configuring Self-Service anywhere
chocolatey_feature 'showNonElevatedWarnings' do
action :disable
end
chocolatey_feature 'useBackgroundService' do
action :enable
end
chocolatey_feature 'useBackgroundServiceWithNonAdministratorsOnly' do
action :enable
end
chocolatey_feature 'allowBackgroundServiceUninstallsFromUserInstallsOnly' do
action :enable
end
chocolatey_config 'backgroundServiceAllowedCommands' do
value 'install,upgrade,uninstall'
end
### e. Ensure Chocolatey Central Management ###
#### If you want to manage and report on endpoints, you can set up and configure
### Central Management. There are multiple portions to manage, so you'll see
### a section on agents here along with notes on how to configure the server
### side components.
chocolatey_package 'chocolatey-agent' do
action install
source "#{NugetRepositoryUrl}"
# user "#{NugetRepositoryUsername}"
# password "#{NugetRepositoryPassword}"
only_if { ChocolateyCentralManagementUrl != nil }
end
chocolatey_config 'CentralManagementServiceUrl' do
value "#{ChocolateyCentralManagementUrl}"
only_if { ChocolateyCentralManagementUrl != nil }
end
chocolatey_config 'centralManagementClientCommunicationSaltAdditivePassword' do
value "#{ChocolateyCentralManagementClientSalt}"
only_if { ChocolateyCentralManagementClientSalt != nil }
end
chocolatey_config 'centralManagementServiceCommunicationSaltAdditivePassword' do
value "#{ChocolateyCentralManagementServiceSalt}"
only_if { ChocolateyCentralManagementServiceSalt != nil }
end
chocolatey_feature 'useChocolateyCentralManagement' do
action :enable
only_if { ChocolateyCentralManagementUrl != nil }
end
chocolatey_feature 'useChocolateyCentralManagementDeployments' do
action :enable
only_if { ChocolateyCentralManagementUrl != nil }
end
Requires cChoco DSC Resource. See docs at https://github.com/chocolatey/cChoco.
If Applicable - Chocolatey Configuration/Installation
#requires -Modules cChoco
## 1. REQUIREMENTS ##
### Here are the requirements necessary to ensure this is successful.
### a. Internal/Private Cloud Repository Set Up ###
#### You'll need an internal/private cloud repository you can use. These are
#### generally really quick to set up and there are quite a few options.
#### Chocolatey Software recommends Nexus, Artifactory Pro, or ProGet as they
#### are repository servers and will give you the ability to manage multiple
#### repositories and types from one server installation.
### b. Download Chocolatey Package and Put on Internal Repository ###
#### You need to have downloaded the Chocolatey package as well.
#### Please see https://chocolatey.org/install#organization
### c. Other Requirements ###
#### i. Requires chocolatey\cChoco DSC module to be installed on the machine compiling the DSC manifest
#### NOTE: This will need to be installed before running the DSC portion of this script
if (-not (Get-Module cChoco -ListAvailable)) {
$null = Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
if (($PSGallery = Get-PSRepository -Name PSGallery).InstallationPolicy -ne "Trusted") {
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
}
Install-Module -Name cChoco
if ($PSGallery.InstallationPolicy -ne "Trusted") {
Set-PSRepository -Name PSGallery -InstallationPolicy $PSGallery.InstallationPolicy
}
}
#### ii. Requires a hosted copy of the install.ps1 script
##### This should be available to download without authentication.
##### The original script can be found here: https://community.chocolatey.org/install.ps1
Configuration ChocolateyConfig {
## 2. TOP LEVEL VARIABLES ##
param(
### a. Your internal repository url (the main one). ###
#### Should be similar to what you see when you browse
#### to https://community.chocolatey.org/api/v2/
$NugetRepositoryUrl = "INTERNAL REPO URL",
### b. Chocolatey nupkg download url ###
#### This url should result in an immediate download when you navigate to it in
#### a web browser
$ChocolateyNupkgUrl = "INTERNAL REPO URL/package/chocolatey.1.1.0.nupkg",
### c. Internal Repository Credential ###
#### If required, add the repository access credential here
# $NugetRepositoryCredential = [PSCredential]::new(
# "username",
# ("password" | ConvertTo-SecureString -AsPlainText -Force)
# ),
### d. Install.ps1 URL
#### The path to the hosted install script:
$ChocolateyInstallPs1Url = "https://community.chocolatey.org/install.ps1"
### e. Chocolatey Central Management (CCM) ###
#### If using CCM to manage Chocolatey, add the following:
#### i. Endpoint URL for CCM
# $ChocolateyCentralManagementUrl = "https://chocolatey-central-management:24020/ChocolateyManagementService",
#### ii. If using a Client Salt, add it here
# $ChocolateyCentralManagementClientSalt = "clientsalt",
#### iii. If using a Service Salt, add it here
# $ChocolateyCentralManagementServiceSalt = "servicesalt"
)
Import-DscResource -ModuleName PSDesiredStateConfiguration
Import-DscResource -ModuleName cChoco
Node 'localhost' {
## 3. ENSURE CHOCOLATEY IS INSTALLED ##
### Ensure Chocolatey is installed from your internal repository
Environment chocoDownloadUrl {
Name = "chocolateyDownloadUrl"
Value = $ChocolateyNupkgUrl
}
cChocoInstaller installChocolatey {
DependsOn = "[Environment]chocoDownloadUrl"
InstallDir = Join-Path $env:ProgramData "chocolatey"
ChocoInstallScriptUrl = $ChocolateyInstallPs1Url
}
## 4. CONFIGURE CHOCOLATEY BASELINE ##
### a. FIPS Feature ###
#### If you need FIPS compliance - make this the first thing you configure
#### before you do any additional configuration or package installations
# cChocoFeature featureFipsCompliance {
# FeatureName = "useFipsCompliantChecksums"
# }
### b. Apply Recommended Configuration ###
#### Move cache location so Chocolatey is very deterministic about
#### cleaning up temporary data and the location is secured to admins
cChocoConfig cacheLocation {
DependsOn = "[cChocoInstaller]installChocolatey"
ConfigName = "cacheLocation"
Value = "C:\ProgramData\chocolatey\cache"
}
#### Increase timeout to at least 4 hours
cChocoConfig commandExecutionTimeoutSeconds {
DependsOn = "[cChocoInstaller]installChocolatey"
ConfigName = "commandExecutionTimeoutSeconds"
Value = 14400
}
#### Turn off download progress when running choco through integrations
cChocoFeature showDownloadProgress {
DependsOn = "[cChocoInstaller]installChocolatey"
FeatureName = "showDownloadProgress"
Ensure = "Absent"
}
### c. Sources ###
#### Remove the default community package repository source
cChocoSource removeCommunityRepository {
DependsOn = "[cChocoInstaller]installChocolatey"
Name = "chocolatey"
Ensure = "Absent"
}
#### Add internal default sources
#### You could have multiple sources here, so we will provide an example
#### of one using the remote repo variable here.
#### NOTE: This EXAMPLE may require changes
cChocoSource addInternalSource {
DependsOn = "[cChocoInstaller]installChocolatey"
Name = "ChocolateyInternal"
Source = $NugetRepositoryUrl
Credentials = $NugetRepositoryCredential
Priority = 1
}
### b. Keep Chocolatey Up To Date ###
#### Keep chocolatey up to date based on your internal source
#### You control the upgrades based on when you push an updated version
#### to your internal repository.
#### Note the source here is to the OData feed, similar to what you see
#### when you browse to https://community.chocolatey.org/api/v2/
cChocoPackageInstaller updateChocolatey {
DependsOn = "[cChocoSource]addInternalSource", "[cChocoSource]removeCommunityRepository"
Name = "chocolatey"
AutoUpgrade = $true
}
## 5. ENSURE CHOCOLATEY FOR BUSINESS ##
### If you don't have Chocolatey for Business (C4B), you'll want to remove from here down.
### a. Ensure The License File Is Installed ###
#### Create a license package using script from https://docs.chocolatey.org/en-us/how-tos/setup-offline-installation#exercise-4-create-a-package-for-the-license
cChocoPackageInstaller chocolateyLicense {
DependsOn = "[cChocoPackageInstaller]updateChocolatey"
Name = "chocolatey-license"
}
### b. Disable The Licensed Source ###
#### The licensed source cannot be removed, so it must be disabled.
#### This must occur after the license has been set by the license package.
Script disableLicensedSource {
DependsOn = "[cChocoPackageInstaller]chocolateyLicense"
GetScript = {
$Source = choco source list --limitoutput | `
ConvertFrom-Csv -Delimiter '|' -Header Name, Source, Disabled | `
Where-Object Name -eq "chocolatey.licensed"
return @{
Result = if ($Source) {
[bool]::Parse($Source.Disabled)
} else {
Write-Warning "Source 'chocolatey.licensed' was not present."
$true # Source does not need disabling
}
}
}
SetScript = {
$null = choco source disable --name "chocolatey.licensed"
}
TestScript = {
$State = [ScriptBlock]::Create($GetScript).Invoke()
return $State.Result
}
}
### c. Ensure Chocolatey Licensed Extension ###
#### You will have downloaded the licensed extension to your internal repository
#### as you have disabled the licensed repository in step 5b.
#### Ensure the chocolatey.extension package (aka Chocolatey Licensed Extension)
cChocoPackageInstaller chocolateyLicensedExtension {
DependsOn = "[Script]disableLicensedSource"
Name = "chocolatey.extension"
}
#### The Chocolatey Licensed Extension unlocks all of the following, which also have configuration/feature items available with them. You may want to visit the feature pages to see what you might want to also enable:
#### - Package Builder - https://docs.chocolatey.org/en-us/features/paid/package-builder
#### - Package Internalizer - https://docs.chocolatey.org/en-us/features/paid/package-internalizer
#### - Package Synchronization (3 components) - https://docs.chocolatey.org/en-us/features/paid/package-synchronization
#### - Package Reducer - https://docs.chocolatey.org/en-us/features/paid/package-reducer
#### - Package Audit - https://docs.chocolatey.org/en-us/features/paid/package-audit
#### - Package Throttle - https://docs.chocolatey.org/en-us/features/paid/package-throttle
#### - CDN Cache Access - https://docs.chocolatey.org/en-us/features/paid/private-cdn
#### - Branding - https://docs.chocolatey.org/en-us/features/paid/branding
#### - Self-Service Anywhere (more components will need to be installed and additional configuration will need to be set) - https://docs.chocolatey.org/en-us/features/paid/self-service-anywhere
#### - Chocolatey Central Management (more components will need to be installed and additional configuration will need to be set) - https://docs.chocolatey.org/en-us/features/paid/chocolatey-central-management
#### - Other - https://docs.chocolatey.org/en-us/features/paid/
### d. Ensure Self-Service Anywhere ###
#### If you have desktop clients where users are not administrators, you may
#### to take advantage of deploying and configuring Self-Service anywhere
cChocoFeature hideElevatedWarnings {
DependsOn = "[cChocoPackageInstaller]chocolateyLicensedExtension"
FeatureName = "showNonElevatedWarnings"
Ensure = "Absent"
}
cChocoFeature useBackgroundService {
DependsOn = "[cChocoPackageInstaller]chocolateyLicensedExtension"
FeatureName = "useBackgroundService"
Ensure = "Present"
}
cChocoFeature useBackgroundServiceWithNonAdmins {
DependsOn = "[cChocoPackageInstaller]chocolateyLicensedExtension"
FeatureName = "useBackgroundServiceWithNonAdministratorsOnly"
Ensure = "Present"
}
cChocoFeature useBackgroundServiceUninstallsForUserInstalls {
DependsOn = "[cChocoPackageInstaller]chocolateyLicensedExtension"
FeatureName = "allowBackgroundServiceUninstallsFromUserInstallsOnly"
Ensure = "Present"
}
cChocoConfig allowedBackgroundServiceCommands {
DependsOn = "[cChocoFeature]useBackgroundService"
ConfigName = "backgroundServiceAllowedCommands"
Value = "install,upgrade,uninstall"
}
### e. Ensure Chocolatey Central Management ###
#### If you want to manage and report on endpoints, you can set up and configure
### Central Management. There are multiple portions to manage, so you'll see
### a section on agents here along with notes on how to configure the server
### side components.
if ($ChocolateyCentralManagementUrl) {
cChocoPackageInstaller chocolateyAgent {
DependsOn = "[cChocoPackageInstaller]chocolateyLicensedExtension"
Name = "chocolatey-agent"
}
cChocoConfig centralManagementServiceUrl {
DependsOn = "[cChocoPackageInstaller]chocolateyAgent"
ConfigName = "CentralManagementServiceUrl"
Value = $ChocolateyCentralManagementUrl
}
if ($ChocolateyCentralManagementClientSalt) {
cChocoConfig centralManagementClientSalt {
DependsOn = "[cChocoPackageInstaller]chocolateyAgent"
ConfigName = "centralManagementClientCommunicationSaltAdditivePassword"
Value = $ChocolateyCentralManagementClientSalt
}
}
if ($ChocolateyCentralManagementServiceSalt) {
cChocoConfig centralManagementServiceSalt {
DependsOn = "[cChocoPackageInstaller]chocolateyAgent"
ConfigName = "centralManagementServiceCommunicationSaltAdditivePassword"
Value = $ChocolateyCentralManagementServiceSalt
}
}
cChocoFeature useCentralManagement {
DependsOn = "[cChocoPackageInstaller]chocolateyAgent"
FeatureName = "useChocolateyCentralManagement"
Ensure = "Present"
}
cChocoFeature useCentralManagementDeployments {
DependsOn = "[cChocoPackageInstaller]chocolateyAgent"
FeatureName = "useChocolateyCentralManagementDeployments"
Ensure = "Present"
}
}
}
}
# If working this into an existing configuration with a good method for
$ConfigData = @{
AllNodes = @(
@{
NodeName = "localhost"
PSDscAllowPlainTextPassword = $true
}
)
}
try {
Push-Location $env:Temp
$Config = ChocolateyConfig -ConfigurationData $ConfigData
Start-DscConfiguration -Path $Config.PSParentPath -Wait -Verbose -Force
} finally {
Pop-Location
}
Requires Puppet Chocolatey Provider module. See docs at https://forge.puppet.com/puppetlabs/chocolatey.
If Applicable - Chocolatey Configuration/Installation
## 1. REQUIREMENTS ##
### Here are the requirements necessary to ensure this is successful.
### a. Internal/Private Cloud Repository Set Up ###
#### You'll need an internal/private cloud repository you can use. These are
#### generally really quick to set up and there are quite a few options.
#### Chocolatey Software recommends Nexus, Artifactory Pro, or ProGet as they
#### are repository servers and will give you the ability to manage multiple
#### repositories and types from one server installation.
### b. Download Chocolatey Package and Put on Internal Repository ###
#### You need to have downloaded the Chocolatey package as well.
#### Please see https://chocolatey.org/install#organization
### c. Other Requirements ###
#### i. Requires puppetlabs/chocolatey module
#### See https://forge.puppet.com/puppetlabs/chocolatey
## 2. TOP LEVEL VARIABLES ##
### a. Your internal repository url (the main one). ###
#### Should be similar to what you see when you browse
#### to https://community.chocolatey.org/api/v2/
$_repository_url = 'INTERNAL REPO URL'
### b. Chocolatey nupkg download url ###
#### This url should result in an immediate download when you navigate to it in
#### a web browser
$_choco_download_url = 'INTERNAL REPO URL/package/chocolatey.1.1.0.nupkg'
### c. Chocolatey Central Management (CCM) ###
#### If using CCM to manage Chocolatey, add the following:
#### i. Endpoint URL for CCM
# $_chocolatey_central_management_url = 'https://chocolatey-central-management:24020/ChocolateyManagementService'
#### ii. If using a Client Salt, add it here
# $_chocolatey_central_management_client_salt = "clientsalt"
#### iii. If using a Service Salt, add it here
# $_chocolatey_central_management_service_salt = 'servicesalt'
## 3. ENSURE CHOCOLATEY IS INSTALLED ##
### Ensure Chocolatey is installed from your internal repository
### Note: `chocolatey_download_url is completely different than normal
### source locations. This is directly to the bare download url for the
### chocolatey.nupkg, similar to what you see when you browse to
### https://community.chocolatey.org/api/v2/package/chocolatey
class {'chocolatey':
chocolatey_download_url => $_choco_download_url,
use_7zip => false,
}
## 4. CONFIGURE CHOCOLATEY BASELINE ##
### a. FIPS Feature ###
#### If you need FIPS compliance - make this the first thing you configure
#### before you do any additional configuration or package installations
#chocolateyfeature {'useFipsCompliantChecksums':
# ensure => enabled,
#}
### b. Apply Recommended Configuration ###
#### Move cache location so Chocolatey is very deterministic about
#### cleaning up temporary data and the location is secured to admins
chocolateyconfig {'cacheLocation':
value => 'C:\ProgramData\chocolatey\cache',
}
#### Increase timeout to at least 4 hours
chocolateyconfig {'commandExecutionTimeoutSeconds':
value => '14400',
}
#### Turn off download progress when running choco through integrations
chocolateyfeature {'showDownloadProgress':
ensure => disabled,
}
### c. Sources ###
#### Remove the default community package repository source
chocolateysource {'chocolatey':
ensure => absent,
location => 'https://community.chocolatey.org/api/v2/',
}
#### Add internal default sources
#### You could have multiple sources here, so we will provide an example
#### of one using the remote repo variable here
#### NOTE: This EXAMPLE requires changes
chocolateysource {'internal_chocolatey':
ensure => present,
location => $_repository_url,
priority => 1,
username => 'optional',
password => 'optional,not ensured',
bypass_proxy => true,
admin_only => false,
allow_self_service => false,
}
### b. Keep Chocolatey Up To Date ###
#### Keep chocolatey up to date based on your internal source
#### You control the upgrades based on when you push an updated version
#### to your internal repository.
#### Note the source here is to the OData feed, similar to what you see
#### when you browse to https://community.chocolatey.org/api/v2/
package {'chocolatey':
ensure => latest,
provider => chocolatey,
source => $_repository_url,
}
## 5. ENSURE CHOCOLATEY FOR BUSINESS ##
### If you don't have Chocolatey for Business (C4B), you'll want to remove from here down.
### a. Ensure The License File Is Installed ###
#### Create a license package using script from https://docs.chocolatey.org/en-us/guides/organizations/organizational-deployment-guide#exercise-4-create-a-package-for-the-license
# TODO: Add resource for installing/ensuring the chocolatey-license package
package {'chocolatey-license':
ensure => latest,
provider => chocolatey,
source => $_repository_url,
}
### b. Disable The Licensed Source ###
#### The licensed source cannot be removed, so it must be disabled.
#### This must occur after the license has been set by the license package.
## Disabled sources still need all other attributes until
## https://tickets.puppetlabs.com/browse/MODULES-4449 is resolved.
## Password is necessary with user, but not ensurable, so it should not
## matter what it is set to here. If you ever do get into trouble here,
## the password is your license GUID.
chocolateysource {'chocolatey.licensed':
ensure => disabled,
priority => '10',
user => 'customer',
password => '1234',
require => Package['chocolatey-license'],
}
### c. Ensure Chocolatey Licensed Extension ###
#### You will have downloaded the licensed extension to your internal repository
#### as you have disabled the licensed repository in step 5b.
#### Ensure the chocolatey.extension package (aka Chocolatey Licensed Extension)
package {'chocolatey.extension':
ensure => latest,
provider => chocolatey,
source => $_repository_url,
require => Package['chocolatey-license'],
}
#### The Chocolatey Licensed Extension unlocks all of the following, which also have configuration/feature items available with them. You may want to visit the feature pages to see what you might want to also enable:
#### - Package Builder - https://docs.chocolatey.org/en-us/features/paid/package-builder
#### - Package Internalizer - https://docs.chocolatey.org/en-us/features/paid/package-internalizer
#### - Package Synchronization (3 components) - https://docs.chocolatey.org/en-us/features/paid/package-synchronization
#### - Package Reducer - https://docs.chocolatey.org/en-us/features/paid/package-reducer
#### - Package Audit - https://docs.chocolatey.org/en-us/features/paid/package-audit
#### - Package Throttle - https://docs.chocolatey.org/en-us/features/paid/package-throttle
#### - CDN Cache Access - https://docs.chocolatey.org/en-us/features/paid/private-cdn
#### - Branding - https://docs.chocolatey.org/en-us/features/paid/branding
#### - Self-Service Anywhere (more components will need to be installed and additional configuration will need to be set) - https://docs.chocolatey.org/en-us/features/paid/self-service-anywhere
#### - Chocolatey Central Management (more components will need to be installed and additional configuration will need to be set) - https://docs.chocolatey.org/en-us/features/paid/chocolatey-central-management
#### - Other - https://docs.chocolatey.org/en-us/features/paid/
### d. Ensure Self-Service Anywhere ###
#### If you have desktop clients where users are not administrators, you may
#### to take advantage of deploying and configuring Self-Service anywhere
chocolateyfeature {'showNonElevatedWarnings':
ensure => disabled,
}
chocolateyfeature {'useBackgroundService':
ensure => enabled,
}
chocolateyfeature {'useBackgroundServiceWithNonAdministratorsOnly':
ensure => enabled,
}
chocolateyfeature {'allowBackgroundServiceUninstallsFromUserInstallsOnly':
ensure => enabled,
}
chocolateyconfig {'backgroundServiceAllowedCommands':
value => 'install,upgrade,uninstall',
}
### e. Ensure Chocolatey Central Management ###
#### If you want to manage and report on endpoints, you can set up and configure
### Central Management. There are multiple portions to manage, so you'll see
### a section on agents here along with notes on how to configure the server
### side components.
if $_chocolatey_central_management_url {
package {'chocolatey-agent':
ensure => latest,
provider => chocolatey,
source => $_repository_url,
require => Package['chocolatey-license'],
}
chocolateyconfig {'CentralManagementServiceUrl':
value => $_chocolatey_central_management_url,
}
if $_chocolatey_central_management_client_salt {
chocolateyconfig {'centralManagementClientCommunicationSaltAdditivePassword':
value => $_chocolatey_central_management_client_salt,
}
}
if $_chocolatey_central_management_service_salt {
chocolateyconfig {'centralManagementClientCommunicationSaltAdditivePassword':
value => $_chocolatey_central_management_client_salt,
}
}
chocolateyfeature {'useChocolateyCentralManagement':
ensure => enabled,
require => Package['chocolatey-agent'],
}
chocolateyfeature {'useChocolateyCentralManagementDeployments':
ensure => enabled,
require => Package['chocolatey-agent'],
}
}
Need Help? View our docs or file an issue.
There is already a version of this package in your Script Builder
Current Version | New Version |
---|---|
- Passing
- Failing
- Pending
- Unknown / Exempted

Downloads:
2,384
Downloads of v 2.3.0.1:
1,756
Last Update:
15 Aug 2015
Package Maintainer(s):
Software Author(s):
- Heath Stewart
Tags:
windows installer powershell cmdlets msi product msp patch mst transform- Software Specific:
- Software Site
- Software License
- Package Specific:
- Package outdated?
- Package broken?
- Contact Maintainers
- Contact Site Admins
- Software Vendor?
- Report Abuse
- Download

psmsi
- 1
- 2
- 3
2.3.0.1 | Updated: 15 Aug 2015
- Software Specific:
- Software Site
- Software License
- Package Specific:
- Package outdated?
- Package broken?
- Contact Maintainers
- Contact Site Admins
- Software Vendor?
- Report Abuse
- Download
Downloads:
2,384
Downloads of v 2.3.0.1:
1,756
Maintainer(s):
Software Author(s):
- Heath Stewart
Edit Package
To edit the metadata for a package, please upload an updated version of the package.
Chocolatey's Community Package Repository currently does not allow updating package metadata on the website. This helps ensure that the package itself (and the source used to build the package) remains the one true source of package metadata.
This does require that you increment the package version.
- 1
- 2
- 3
psmsi
2.3.0.1
- 1
- 2
- 3
All Checks are Passing
3 Passing Tests
Deployment Method: Individual Install, Upgrade, & Uninstall
To install psmsi, run the following command from the command line or from PowerShell:
To upgrade psmsi, run the following command from the command line or from PowerShell:
To uninstall psmsi, run the following command from the command line or from PowerShell:
Deployment Method:
📝 NOTE: This applies to both open source and commercial editions of Chocolatey.
1. Enter Your Internal Repository Url
(this should look similar to https://community.chocolatey.org/api/v2/)
2. Setup Your Environment
1. Ensure you are set for organizational deployment
Please see the organizational deployment guide
2. Get the package into your environment
Option 1: Cached Package (Unreliable, Requires Internet - Same As Community)-
Open Source or Commercial:
- Proxy Repository - Create a proxy nuget repository on Nexus, Artifactory Pro, or a proxy Chocolatey repository on ProGet. Point your upstream to https://community.chocolatey.org/api/v2/. Packages cache on first access automatically. Make sure your choco clients are using your proxy repository as a source and NOT the default community repository. See source command for more information.
- You can also just download the package and push it to a repository Download
-
Open Source
-
Download the package:
Download - Follow manual internalization instructions
-
-
Package Internalizer (C4B)
-
Run: (additional options)
choco download psmsi --internalize --source=https://community.chocolatey.org/api/v2/
-
For package and dependencies run:
choco push --source="'INTERNAL REPO URL'"
- Automate package internalization
-
Run: (additional options)
3. Copy Your Script
choco upgrade psmsi -y --source="'INTERNAL REPO URL'" [other options]
See options you can pass to upgrade.
See best practices for scripting.
Add this to a PowerShell script or use a Batch script with tools and in places where you are calling directly to Chocolatey. If you are integrating, keep in mind enhanced exit codes.
If you do use a PowerShell script, use the following to ensure bad exit codes are shown as failures:
choco upgrade psmsi -y --source="'INTERNAL REPO URL'"
$exitCode = $LASTEXITCODE
Write-Verbose "Exit code was $exitCode"
$validExitCodes = @(0, 1605, 1614, 1641, 3010)
if ($validExitCodes -contains $exitCode) {
Exit 0
}
Exit $exitCode
- name: Install psmsi
win_chocolatey:
name: psmsi
version: '2.3.0.1'
source: INTERNAL REPO URL
state: present
See docs at https://docs.ansible.com/ansible/latest/modules/win_chocolatey_module.html.
chocolatey_package 'psmsi' do
action :install
source 'INTERNAL REPO URL'
version '2.3.0.1'
end
See docs at https://docs.chef.io/resource_chocolatey_package.html.
cChocoPackageInstaller psmsi
{
Name = "psmsi"
Version = "2.3.0.1"
Source = "INTERNAL REPO URL"
}
Requires cChoco DSC Resource. See docs at https://github.com/chocolatey/cChoco.
package { 'psmsi':
ensure => '2.3.0.1',
provider => 'chocolatey',
source => 'INTERNAL REPO URL',
}
Requires Puppet Chocolatey Provider module. See docs at https://forge.puppet.com/puppetlabs/chocolatey.
4. If applicable - Chocolatey configuration/installation
See infrastructure management matrix for Chocolatey configuration elements and examples.
This package was approved by moderator ferventcoder on 16 Aug 2020.
Exposes Windows Installer functionality to PowerShell, providing means to query installed product and patch information, and to query views on packages.
Microsoft Limited Permissive License (Ms-LPL)
This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.
1. Definitions
The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law.
A "contribution" is the original software, or any additions or changes to the software.
A "contributor" is any person that distributes its contribution under this license.
"Licensed patents" are a contributor's patent claims that read directly on its contribution.
2. Grant of Rights
(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.
(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.
3. Conditions and Limitations
(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.
(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.
(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.
(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.
(F) Platform Limitation- The licenses granted in sections 2(A) & 2(B) extend only to the software or derivative works that you create that run on a Microsoft Windows operating system product.
Copyright (c) 2004, Outercurve Foundation.
This software is released under the Microsoft Reciprocal License (MS-RL) (the "License"); you may not use the software except in compliance with the License.
The text of the Microsoft Reciprocal License (MS-RL) can be found online at:
http://opensource.org/licenses/ms-rl
Microsoft Reciprocal License (MS-RL)
This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.
1. Definitions
The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law.
A "contribution" is the original software, or any additions or changes to the software.
A "contributor" is any person that distributes its contribution under this license.
"Licensed patents" are a contributor's patent claims that read directly on its contribution.
2. Grant of Rights
(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.
(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.
3. Conditions and Limitations
(A) Reciprocal Grants- For any file you distribute that contains code from the software (in source code or binary format), you must provide recipients the source code to that file along with a copy of this license, which license will govern that file. You may license other files that are entirely your own work and do not contain code from the software under any terms you choose.
(B) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
(C) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.
(D) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.
(E) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.
(F) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.
TOPIC
about_MSI
DESCRIPTION
Exposes Windows Installer functionality to PowerShell, providing means to
query installed product and patch information and to query views on
packages.
VARIABLES
MsiAttributeColumnFormat
The format specification string to alter how attributes are displayed.
Valid values are:
-- G: Displays the integer value. This is the default.
-- X: Displays the hexadecimal integer value.
-- F: Displays one or more names for well-known attribute types.
ONLINE
https://psmsi.codeplex.com/documentation
LICENSE
https://psmsi.codeplex.com/license
HISTORY
See http://psmsi.codeplex.com/releases for up-to-date information.
2.3.0
This release adds support for per-machine installs of the module.
Administrators may choose this option for enterprise deployment
or to make the module available to remote sessions.
Several performance enhancements were made in addition to bug fixes:
-- PSPath property for components only resolves full path when used.
-- Export-MSIPatchXml no longer requires full path to patch MSP.
-- Get-MSITable can apply patch MSPs to not-installed product MSIs.
Piping components to Get-ChildItem now also works correctly for
file system and registry key paths. To support this behavior, a
KeyPath property was added that contains the non-transformed path
previously contained within the PSPath property.
2.2.1
This release is a servicing issue and fixes various issues, notably:
-- Returns the correct 32- or 64-bit registry path.
-- Module can correctly be loaded into PowerShell v2.
-- Older versions of Orca are now supported.
-- The Record property adapter is now case-insensitive.
The Get-MSITable cmdlet now also supports applying patches in
sequence order and transforms.
2.2.0
This release adds many new cmdlets from the past release, including
cmdlets to select records from a table or custom query, run ICEs on a
package, and install, repair, or uninstall packages. The install,
repair, and uninstall cmdlets also display progress, warning, and
error information. Some issues were fixed as well.
The snap-in installer has been removed in favor of the module
installer - a per-user install that will upgrade any previous version.
You may also install the package to a per-machine location, though
elevation is required. This will make the module accessible to any
host for any user on the machine.
<?xml version="1.0" encoding="utf-8"?><helpItems schema="maml" xmlns="http://msh" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:maml="http://schemas.microsoft.com/maml/2004/10"><command:command><command:details><command:name>Add-MSISource</command:name><maml:description><maml:para>Adds a registered network source or URL from a product or patch.</maml:para></maml:description><command:verb>Add</command:verb><command:noun>MSISource</command:noun></command:details><maml:description><maml:para>Windows Installer products and patches can have zero or more registered locations that direct Windows Installer where to look for package source. This cmdlet will add a network source or URL to a product or patch and optionally return the remaining registered source locations through the pipeline.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Add-MSISource</maml:name><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode for a product or applied patch.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The directory or URL to register. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to return the remaining registered source through the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code for a patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user SID for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Add-MSISource</maml:name><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode for a product or applied patch.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The directory or URL to register. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to return the remaining registered source through the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code for a patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user SID for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The directory or URL to register. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to return the remaining registered source through the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code for a patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The directory or URL to register. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode for a product or applied patch.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user SID for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.SourceInfo</maml:name><maml:description><maml:para>Source information for an installed product.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.PatchSourceInfo</maml:name><maml:description><maml:para>Source information for an applied patch.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>add-msisource '{707ABAE4-4DC5-478C-9D36-7CC5C1A85A3C}' 'C:\Package Cache\'</dev:code><dev:remarks><maml:para>Adds the C:\Package Cache source location from the specified product.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Clear-MSISource</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Get-MSISource</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Remove-MSISource</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Clear-MSISource</command:name><maml:description><maml:para>Clears all registered network sources and URLs from a product or patch.</maml:para></maml:description><command:verb>Clear</command:verb><command:noun>MSISource</command:noun></command:details><maml:description><maml:para>Windows Installer products and patches can have zero or more registered locations that direct Windows Installer where to look for package source. This cmdlet will clear all network sources and URLs from a product or patch.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Clear-MSISource</maml:name><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode for a product or applied patch.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code for a patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user SID for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code for a patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode for a product or applied patch.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user SID for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.SourceInfo</maml:name><maml:description><maml:para>Source information for an installed product.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.PatchSourceInfo</maml:name><maml:description><maml:para>Source information for an applied patch.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo '{707ABAE4-4DC5-478C-9D36-7CC5C1A85A3C}' | clear-msisource</dev:code><dev:remarks><maml:para>Clears all registered source from the specified product.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Add-MSISource</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Get-MSISource</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Remove-MSISource</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Edit-MSIPackage</command:name><maml:description><maml:para>Opens an install package or patch in Orca or another registered editor.</maml:para></maml:description><command:verb>Edit</command:verb><command:noun>MSIPackage</command:noun></command:details><maml:description><maml:para>Orca can be installed from the Windows SDK. If installed, MSI and MSP packages can be opened in Orca. If Orca is not installed, any application registered with the "Edit" verb for .msi or .msp file extensions is used.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Edit-MSIPackage</maml:name><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a package to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Wait</maml:name><maml:description><maml:para>Wait until the process is closed before opening another package.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Edit-MSIPackage</maml:name><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a package to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Wait</maml:name><maml:description><maml:para>Wait until the process is closed before opening another package.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a package to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a package to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Wait</maml:name><maml:description><maml:para>Wait until the process is closed before opening another package.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:parameters><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-childitem -filter *.msi -recurse | edit-msipackage</dev:code><dev:remarks><maml:para>Opens all install packages in the current directory or subdirectories in separate instances of Orca.</maml:para><maml:para /></dev:remarks></command:example></command:examples></command:command><command:command><command:details><command:name>Export-MSIPatchXml</command:name><maml:description><maml:para>Exports an XML representation of applicability information from a patch package.</maml:para></maml:description><command:verb>Export</command:verb><command:noun>MSIPatchXml</command:noun></command:details><maml:description><maml:para>Windows Installer defines an XML schema that is representational of a patch package - specifically its applicability information. This allows administrators and bundle developers to not require downloading the patch package just to find out if it's applicable or even already installed.</maml:para><maml:para /><maml:para>This XML file can be passed to Get-MSIPatchSequence along with other XML files or patch packages.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Export-MSIPatchXml</maml:name><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to the patch package from which XML is exported.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false" position="1"><maml:name>FilePath</maml:name><maml:description><maml:para>The path to the output XML file.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Encoding</maml:name><maml:description><maml:para>The encoding to use for the output XML file.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">System.Text.Encoding</command:parameterValue><dev:type><maml:name>System.Text.Encoding</maml:name></dev:type><dev:defaultValue>UTF8</dev:defaultValue></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Formatted</maml:name><maml:description><maml:para>Whether to indent the XML file.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Encoding</maml:name><maml:description><maml:para>The encoding to use for the output XML file.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">System.Text.Encoding</command:parameterValue><dev:type><maml:name>System.Text.Encoding</maml:name></dev:type><dev:defaultValue>UTF8</dev:defaultValue></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false" position="1"><maml:name>FilePath</maml:name><maml:description><maml:para>The path to the output XML file.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Formatted</maml:name><maml:description><maml:para>Whether to indent the XML file.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to the patch package from which XML is exported.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>export-msipatchxml .\example.msp .\example.xml -formatted</dev:code><dev:remarks><maml:para>Exports formatted XML from the example.msp patch package in the current directory.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIPatchSequence</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSIComponentInfo</command:name><maml:description><maml:para>Gets information about components registered to the current user and the machine.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSIComponentInfo</command:noun></command:details><maml:description><maml:para>Gets information about all the components registered to the current user and to the machine. You can also limit the components to only those installed by a particular product.</maml:para><maml:para /><maml:para>The information includes the state of the component and the path all based on the product that installed it, since multiple products can install the same component even to different locations.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSIComponentInfo</maml:name><command:parameter aliases="ComponentId" required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ComponentCode</maml:name><maml:description><maml:para>The component GUIDs to retrieve information.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSIComponentInfo</maml:name><command:parameter aliases="ComponentId" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ComponentCode</maml:name><maml:description><maml:para>The component GUIDs to retrieve information.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="1"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode of the product that installed the components to retrieve information.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="ComponentId" required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ComponentCode</maml:name><maml:description><maml:para>The component GUIDs to retrieve information.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="1"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode of the product that installed the components to retrieve information.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ComponentInstallation</maml:name><maml:description><maml:para>Information about the components installed or registered by one or multiple products.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msicomponentinfo</dev:code><dev:remarks><maml:para>This command gets all components installed or registered to the current user or to the machine.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo "{90120000-00BA-0409-0000-0000000FF1CE}" | get-msicomponentinfo -componentcode "{90120000-00BA-0409-0000-0E32E9F6E558}"</dev:code><dev:remarks><maml:para>This command gets information for the component "{90120000-00BA-0409-0000-0E32E9F6E558}" installed by the product "{90120000-00BA-0409-0000-0000000FF1CE}".</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIComponentState</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSIComponentState</command:name><maml:description><maml:para>Gets the install state for all authored components for one or more products installed on the machine.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSIComponentState</command:noun></command:details><maml:description><maml:para>Gets the install state for all components authored into one or more products. This includes all patches applied to the product. In addition to the information returned from Get-MSIComponentInfo, the authored component identifier from the Component table is attached along with a simple boolean property that determines if the component is installed locally or not.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSIComponentState</maml:name><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="0"><maml:name>Product</maml:name><maml:description><maml:para>The products for which authored component state is retrieved.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSIComponentState</maml:name><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The installed ProductCodes that define the components for which state information is retrieved.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The context for registered products. This can be a combination of "Machine", "UserManaged", or "UserUnmanaged".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The security identifier for a user for user-managed and user-unmanaged products.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="0"><maml:name>Product</maml:name><maml:description><maml:para>The products for which authored component state is retrieved.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The installed ProductCodes that define the components for which state information is retrieved.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The context for registered products. This can be a combination of "Machine", "UserManaged", or "UserUnmanaged".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The security identifier for a user for user-managed and user-unmanaged products.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:inputTypes><command:inputType><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>Products for which authored component state is retrieved.</maml:para></maml:description></dev:type></command:inputType></command:inputTypes><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ComponentInstallation#State</maml:name><maml:description><maml:para>State information about the components authored into one or more products and applied patches.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msicomponentstate "{877EF582-78AF-4D84-888B-167FDC3BCC11}"</dev:code><dev:remarks><maml:para>Gets state information for all components authored into the product "{877EF582-78AF-4D84-888B-167FDC3BCC11}" and all applied patches.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo -name *TEST* | get-msicomponentstate</dev:code><dev:remarks><maml:para>Gets state information for all components authored into any product where the ProductName matches *TEST*.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIComponentInfo</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Get-MSIProductInfo</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSIFeatureInfo</command:name><maml:description><maml:para>Gets information about features of an installed or advertised product.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSIFeatureInfo</command:noun></command:details><maml:description><maml:para>A product must install or advertise one or more features. This cmdlet can query feature of a product or products to determine their state and optional usage data.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSIFeatureInfo</maml:name><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="0"><maml:name>Product</maml:name><maml:description><maml:para>The ProductInstallation object that installed or advertised specified features.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSIFeatureInfo</maml:name><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode that installed or advertised specified features.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Name" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="1"><maml:name>FeatureName</maml:name><maml:description><maml:para>The names of the features for which information is retrieved.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="Name" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="1"><maml:name>FeatureName</maml:name><maml:description><maml:para>The names of the features for which information is retrieved.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="0"><maml:name>Product</maml:name><maml:description><maml:para>The ProductInstallation object that installed or advertised specified features.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode that installed or advertised specified features.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:inputTypes><command:inputType><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>The product or products for which features are enumerated.</maml:para></maml:description></dev:type></command:inputType></command:inputTypes><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.FeatureInstallation</maml:name><maml:description><maml:para>Information about the features installed or advertised by one or multiple products.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo "{90120000-00BA-0409-0000-0000000FF1CE}" | get-msifeatureinfo | format-table -view Usage</dev:code><dev:remarks><maml:para>Gets the usage information for all the features installed by the product "{90120000-00BA-0409-0000-0000000FF1CE}".</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msifeatureinfo "{90120000-00BA-0409-0000-0000000FF1CE}" "GrooveFilesIntl_1033"</dev:code><dev:remarks><maml:para>Gets state information for the feature "GrooveFilesIntl_1033" installed by product "{90120000-00BA-0409-0000-0000000FF1CE}".</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIProductInfo</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSIFileHash</command:name><maml:description><maml:para>Gets a hash of a file in a Windows Installer-compatible format.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSIFileHash</command:noun></command:details><maml:description><maml:para>Get-MSIFileHash returns a 128-bit file hash in 4 separate parts, compatible with columns in the MsiFileHash table in Windows Installer packages. All non-versioned files should contain this hash.</maml:para><maml:para /><maml:para>You can optionally add these HashPart1, HashPart2, HashPart3, and HashPart4 properties to FileSystem items.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSIFileHash</maml:name><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to the item or items which must resolve to a file system path. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Passes the item or items passed into this cmdlet through the pipeline with additional properties for the file hash.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSIFileHash</maml:name><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to the item or items which must resolve to a file system path. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Passes the item or items passed into this cmdlet through the pipeline with additional properties for the file hash.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to the item or items which must resolve to a file system path. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Passes the item or items passed into this cmdlet through the pipeline with additional properties for the file hash.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to the item or items which must resolve to a file system path. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.FileHash</maml:name><maml:description><maml:para>If -passthru is not specified, Get-MSIFileHash returns a FileHash object containing the file hash in 4 parts.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>System.IO.DirectoryInfo</maml:name><maml:description><maml:para>If -passthru is specified and the input object is a directory, the directory is returned.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>System.IO.FileInfo</maml:name><maml:description><maml:para>If -passthru is specified and the input object is a file, the file is returned.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msifilehash -path * | format-table -auto</dev:code><dev:remarks><maml:para>This command outputs the file hash of every file in the current directory as a table.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-childitem | where-object {$_.PSIsContainer -eq $False} | get-msifilehash -passthru | format-table Name, MSI* -auto</dev:code><dev:remarks><maml:para>This command outputs the name and hash parts of each file in the current directory.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIFileType</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSIFileType</command:name><maml:description><maml:para>Gets the Windows Installer file type.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSIFileType</command:noun></command:details><maml:description><maml:para>Gets the Windows Installer file type for a given file or files.</maml:para><maml:para /><maml:para>You can optionally add this MSIFileType property to FileSystem items.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSIFileType</maml:name><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to the item or items which must resolve to a file system path. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Passes the item or items passed into this cmdlet through the pipeline with the additional property for the file type.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSIFileType</maml:name><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to the item or items which must resolve to a file system path. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Passes the item or items passed into this cmdlet through the pipeline with the additional property for the file type.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to the item or items which must resolve to a file system path. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Passes the item or items passed into this cmdlet through the pipeline with the additional property for the file type.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to the item or items which must resolve to a file system path. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>string</maml:name><maml:description><maml:para>If -passthru is not specified, Get-MSIFileType returns a string object.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>System.IO.DirectoryInfo</maml:name><maml:description><maml:para>If -passthru is specified and the input object is a directory, the directory is returned.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>System.IO.FileInfo</maml:name><maml:description><maml:para>If -passthru is specified and the input object is a file, the file is returned.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msifilehash -path $env:WINDIR\Installer</dev:code><dev:remarks><maml:para>This command outputs the file type of files in the Windows Installer cache directory.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-childitem -path $env:WINDIR\Installer\* | where-object {$_.PSIsContainer -eq $False} | get-msifiletype -passthru | format-table Name, MSIFileType -auto</dev:code><dev:remarks><maml:para>This command outputs the Windows Installer file type for files in the Windows Installer cache directory.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIFileHash</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSILoggingPolicy</command:name><maml:description><maml:para>Gets the Windows Installer logging policy.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSILoggingPolicy</command:noun></command:details><maml:description><maml:para>The Windows Installer logging policy determines whether logs are generated by default and how much information they contain. This cmdlet gets the current logging policy and can return the logging modes as a collection of strings or the raw string value from the registry.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSILoggingPolicy</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Raw</maml:name><maml:description><maml:para>Returns the raw string value from the registry.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Raw</maml:name><maml:description><maml:para>Returns the raw string value from the registry.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>string</maml:name><maml:description><maml:para>If -raw is specified and a logging policy set, the raw registry value is returned.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>string[]</maml:name><maml:description><maml:para>The default output type consisting of zero or more logging modes that are set in the registry.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><maml:relatedLinks><maml:navigationLink><maml:linkText>Remove-MSILoggingPolicy</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Set-MSILoggingPolicy</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSIPatchInfo</command:name><maml:description><maml:para>Gets patch information for registered patches.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSIPatchInfo</command:noun></command:details><maml:description><maml:para>Gets patch information for a given patch or for all patches registered to a given product or products. You can get patch information for machine-registered patches, and patch information for both user-managed- and user-unmanaged-registered patches for the current or another user.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSIPatchInfo</maml:name><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>Specifies the ProductCode or ProductCodes to get patch information.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="1"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code or patch codes to retrieve patch information.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Everyone</maml:name><maml:description><maml:para>Whether to retrieve user-managed or user-unmanaged patches for everyone.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Filter</maml:name><maml:description><maml:para>The state or states of patches to be retrieved. This can be a combination of "Applied", "Superseded", "Obsoleted", "Registered", or "All".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.PatchStates</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.PatchStates</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The context for registered patches. This can be a combination of "Machine", "UserManaged", or "UserUnmanaged".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The security identifier for a user for user-managed and user-unmanaged patches.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Everyone</maml:name><maml:description><maml:para>Whether to retrieve user-managed or user-unmanaged patches for everyone.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Filter</maml:name><maml:description><maml:para>The state or states of patches to be retrieved. This can be a combination of "Applied", "Superseded", "Obsoleted", "Registered", or "All".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.PatchStates</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.PatchStates</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="1"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code or patch codes to retrieve patch information.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>Specifies the ProductCode or ProductCodes to get patch information.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The context for registered patches. This can be a combination of "Machine", "UserManaged", or "UserUnmanaged".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The security identifier for a user for user-managed and user-unmanaged patches.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.PatchInstallation</maml:name><maml:description><maml:para>Information about patches applied or registered to a product or products.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msipatchinfo</dev:code><dev:remarks><maml:para>This command outputs a table of patch information for all applied patches on the machine.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msipatchinfo -filter superseded | get-childitem</dev:code><dev:remarks><maml:para>This command gets file information for superseded patches on the machine.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 3 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo | where-object {$_.Name -match "Office"} | get-msipatchinfo -filter all</dev:code><dev:remarks><maml:para>This command gets patch information for all patches applied to products with "Office" in the name.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIProductInfo</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSIPatchSequence</command:name><maml:description><maml:para>Given a list of patches or patch XML, outputs the sequence of applicable patches for a product or products.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSIPatchSequence</command:noun></command:details><maml:description><maml:para>Patch packages or patch XML files can be specified along with a list of products. Each patch is added to a list and after all patches specified are processed, the sequence for all applicable patches is output for each product specified.</maml:para><maml:para /><maml:para>By default, the table format is used with a grouping for each product specified.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSIPatchSequence</maml:name><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a package to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="false" position="1"><maml:name>PackagePath</maml:name><maml:description><maml:para>The path to a product package or packages for which the patch sequence is returned.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSIPatchSequence</maml:name><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="false" position="1"><maml:name>PackagePath</maml:name><maml:description><maml:para>The path to a product package or packages for which the patch sequence is returned.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a package to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSIPatchSequence</maml:name><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="false" position="1"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes for products for which the patch sequence is returned.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a package to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSIPatchSequence</maml:name><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a package to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="false" position="1"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes for products for which the patch sequence is returned.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a package to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="false" position="1"><maml:name>PackagePath</maml:name><maml:description><maml:para>The path to a product package or packages for which the patch sequence is returned.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a package to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="false" position="1"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes for products for which the patch sequence is returned.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.PatchSequence</maml:name><maml:description><maml:para>The sequence information for each applicable patch to a product or product package.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues></command:command><command:command><command:details><command:name>Get-MSIProductInfo</command:name><maml:description><maml:para>Gets product information for registered products.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSIProductInfo</command:noun></command:details><maml:description><maml:para>Gets product information for all per-machine, user-managed, and user-unmanaged products on the machine.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSIProductInfo</maml:name><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes to retrieve product information.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Everyone</maml:name><maml:description><maml:para>Whether to retrieve user-managed or user-unmanaged products for everyone.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The context for registered products. This can be a combination of "Machine", "UserManaged", or "UserUnmanaged".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The security identifier for a user for user-managed and user-unmanaged products.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSIProductInfo</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Everyone</maml:name><maml:description><maml:para>Whether to retrieve user-managed or user-unmanaged products for everyone.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Name</maml:name><maml:description><maml:para>The name of a product or products to retrieve. Wildcards are supported.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The context for registered products. This can be a combination of "Machine", "UserManaged", or "UserUnmanaged".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The security identifier for a user for user-managed and user-unmanaged products.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Everyone</maml:name><maml:description><maml:para>Whether to retrieve user-managed or user-unmanaged products for everyone.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Name</maml:name><maml:description><maml:para>The name of a product or products to retrieve. Wildcards are supported.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes to retrieve product information.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The context for registered products. This can be a combination of "Machine", "UserManaged", or "UserUnmanaged".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The security identifier for a user for user-managed and user-unmanaged products.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>Information about the installed or advertised product. To see just the advertised properties use the PSAdvertised property set; or, to see just the installed properties use the PSInstalled property set.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo</dev:code><dev:remarks><maml:para>This command outputs product information for all registered products assigned to this machine.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo | where-object {$_.Name -match "Visual Studio"}</dev:code><dev:remarks><maml:para>This command outputs all product information for products with "Visual Studio" in the name assigned to this machine.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 3 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo -installcontext userunmanaged | where-object {$_.ProductState -eq "Installed"} | get-childitem</dev:code><dev:remarks><maml:para>This command gets file information for all installed user-unmanaged products.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 4 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo "{1862162E-3BBC-448F-AA63-49F33152D54A}"</dev:code><dev:remarks><maml:para>This command gets product information for the given ProductCode.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIPatchInfo</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Get-MSIRelatedProductInfo</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSIProperty</command:name><maml:description><maml:para>Gets properties from a product or patch package.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSIProperty</command:noun></command:details><maml:description><maml:para>Selects all or matching properties from a product or patch package and either returns them to the pipeline or attaches them to a file object for a product or patch package if -PassThru is specified. When propertie are attached to a file object you can select them all using the "MSIProperties" property set.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSIProperty</maml:name><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="0"><maml:name>Property</maml:name><maml:description><maml:para>Optional list of property names to select. Wildcard are permitted.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product or patch package to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the file object back to the pipeline with selected properties attached.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package to apply to the product package. Multiple patches are applied in authored sequence order.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform to apply to the product package.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSIProperty</maml:name><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="0"><maml:name>Property</maml:name><maml:description><maml:para>Optional list of property names to select. Wildcard are permitted.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product or patch package to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the file object back to the pipeline with selected properties attached.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package to apply to the product package. Multiple patches are applied in authored sequence order.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform to apply to the product package.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product or patch package to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the file object back to the pipeline with selected properties attached.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package to apply to the product package. Multiple patches are applied in authored sequence order.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product or patch package to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="0"><maml:name>Property</maml:name><maml:description><maml:para>Optional list of property names to select. Wildcard are permitted.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform to apply to the product package.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.Record</maml:name><maml:description><maml:para>The selected properties from the product or patch package.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>System.IO.FileInfo</maml:name><maml:description><maml:para>The original file object with selected properties attached and referenced by the "MSIProperties" property set.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproperty Product*, UpgradeCode -path example.msi</dev:code><dev:remarks><maml:para>Gets the identifying properties from the example.msi product package.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-childitem -filter *.msi | get-msiproperty -passthru | select Name, MSIProperties</dev:code><dev:remarks><maml:para>Attaches all properties from each product package and shows them all along with the file name.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSITable</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSIRelatedProductInfo</command:name><maml:description><maml:para>Gets product information for related products.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSIRelatedProductInfo</command:noun></command:details><maml:description><maml:para>Gets product information for related products based on an UpgradeCode.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSIRelatedProductInfo</maml:name><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>UpgradeCode</maml:name><maml:description><maml:para>The UpgradeCode for related products.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>UpgradeCode</maml:name><maml:description><maml:para>The UpgradeCode for related products.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>Information about the installed or advertised product. To see just the installed properties use the PSInstalled property set.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msirelatedproductinfo "{B4160C68-1EA5-458F-B1EA-E69B41E44007}"</dev:code><dev:remarks><maml:para>This command gets all related products based on their UpgradeCode.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIProductInfo</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSISharedComponentInfo</command:name><maml:description><maml:para>Gets information about shared components installed or registered for the current user or the machine.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSISharedComponentInfo</command:noun></command:details><maml:description><maml:para>Shared components are component which are installed to the same directory by one or more products. This cmdlet gets information about all or specified shared components installed for the current user or the machine.</maml:para><maml:para /><maml:para>The output is already sorted by ComponentCode then ProductCode.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSISharedComponentInfo</maml:name><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="false" position="0"><maml:name>ComponentCode</maml:name><maml:description><maml:para>The component GUIDs to retrieve information.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="1"><maml:name>Count</maml:name><maml:description><maml:para>The minimum number count for shared components returned. The absolute minimum is 2.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Int32</command:parameterValue><dev:type><maml:name>Int32</maml:name></dev:type><dev:defaultValue>2</dev:defaultValue></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="false" position="0"><maml:name>ComponentCode</maml:name><maml:description><maml:para>The component GUIDs to retrieve information.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="1"><maml:name>Count</maml:name><maml:description><maml:para>The minimum number count for shared components returned. The absolute minimum is 2.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Int32</command:parameterValue><dev:type><maml:name>Int32</maml:name></dev:type><dev:defaultValue>2</dev:defaultValue></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ComponentInstallation</maml:name><maml:description><maml:para>Information about the shared components installed or registered by one or more products.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msisharedcomponentinfo -count 4 | format-table -view Clients</dev:code><dev:remarks><maml:para>Gets shared components installed by at least 4 products (or features) and displays them in a table grouped by ComponentCode.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIComponentInfo</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSISource</command:name><maml:description><maml:para>Gets the registered network source or URLs for a product or patch.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSISource</command:noun></command:details><maml:description><maml:para>Windows Installer products and patches can have zero or more registered locations that direct Windows Installer where to look for package source. This cmdlet will enumerate those locations registered to a product or patch.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSISource</maml:name><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode for a product or applied patch.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code for a patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user SID for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code for a patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode for a product or applied patch.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user SID for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.SourceInfo</maml:name><maml:description><maml:para>Source information for an installed product.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.PatchSourceInfo</maml:name><maml:description><maml:para>Source information for an applied patch.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo | get-msisource</dev:code><dev:remarks><maml:para>Gets the registered source for all installed products on the machine.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Add-MSISource</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Clear-MSISource</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Remove-MSISource</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Get-MSISummaryInfo</command:name><maml:description><maml:para>Gets the summary information from a product or patch package, or from a transform.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSISummaryInfo</command:noun></command:details><maml:description><maml:para>The summary information stream is used by Windows Installer to determine applicability, version requirements, and more. Use this command to view the summary information for a product or patch package, or a transform. The properties returned are adapted for each file type.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSISummaryInfo</maml:name><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a package or transform to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Transforms" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>IncludeTransforms</maml:name><maml:description><maml:para>Whether to enumerate the transforms within a patch package.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSISummaryInfo</maml:name><command:parameter aliases="Transforms" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>IncludeTransforms</maml:name><maml:description><maml:para>Whether to enumerate the transforms within a patch package.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a package or transform to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="Transforms" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>IncludeTransforms</maml:name><maml:description><maml:para>Whether to enumerate the transforms within a patch package.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a package or transform to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a package or transform to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.Package.TransformInfo</maml:name><maml:description><maml:para>Summary information for a transform within a patch package.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.SummaryInfo</maml:name><maml:description><maml:para>Summary information for a product or patch package, or a transform.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-childitem -filter *.ms* | get-msisummaryinfo</dev:code><dev:remarks><maml:para>Gets summary information for any file matching *.ms*, including .msi, .msp, and .mst packages.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msisummaryinfo *.msp -includetransforms</dev:code><dev:remarks><maml:para>Gets the patch and embedded transform summary information.</maml:para><maml:para /></dev:remarks></command:example></command:examples></command:command><command:command><command:details><command:name>Get-MSITable</command:name><maml:description><maml:para>Selects records from a table or custom query from a product or patch package.</maml:para></maml:description><command:verb>Get</command:verb><command:noun>MSITable</command:noun></command:details><maml:description><maml:para>You can query all records from a table or records matching a custom query from a product or patch package. The Windows Installer SDK has more information about custom queries, since the SQL-like syntax is rather constrained.</maml:para><maml:para /><maml:para>When no table or query is provided all tables from the package are displayed. Specifying a patch or transform will cause tables added by the patch or transform to be displayed, along with the operation performed on that table by the patch or transform in the MSIOperation property.</maml:para><maml:para /><maml:para>Records are returned with properties matching column names. If records are selected from a single table, the table name is also part of the type name queryable from the PSTypeNames object property. If the column name is prefixed with the table name - required to disambiguate names, or optional otherwise - a property is returned as typed in the original query string. Note that Windows PowerShell allows periods in property names but may require in some scenarios that a property name with periods is contained in quotes, like 'File.Attributes'.</maml:para><maml:para /><maml:para>For attribute columns in standard Windows Installer tables, you may also query for specific attribute values by specifying a special property name on the end of the attribute column name, like 'File.Attributes'.HasVital, to query for any columns that have the attribute value set. You can define an $MsiAttributeColumnFormat variable to control the display format of attribute columns, though the underlying value will not be changed. Run 'help about_MSI' for more information.</maml:para><maml:para /><maml:para>Note that patch packages do not typically have more than a couple of tables. The patch has to be applied to a product package to view any changes it has made. When applying a patch or transforms, records will contain an operation performed on the record by the patch or transform in the MSIOperation property.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Get-MSITable</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>Table</maml:name><maml:description><maml:para>The table from which all records are selected. If no table name is provided all tables in the database are displayed.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package to apply to the product package. Multiple patches are applied in authored sequence order.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform to apply to the product package.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSITable</maml:name><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="1"><maml:name>Product</maml:name><maml:description><maml:para>An installed product to query.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>IgnoreMachineState</maml:name><maml:description><maml:para>Whether to apply any patches current installed to the product.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type><dev:defaultValue>false</dev:defaultValue></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Query</maml:name><maml:description><maml:para>A custom query for which records are selected. Ambiguous column names must be prefixed with the table name to which they belong.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSITable</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>Table</maml:name><maml:description><maml:para>The table from which all records are selected. If no table name is provided all tables in the database are displayed.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="1"><maml:name>Product</maml:name><maml:description><maml:para>An installed product to query.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>IgnoreMachineState</maml:name><maml:description><maml:para>Whether to apply any patches current installed to the product.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type><dev:defaultValue>false</dev:defaultValue></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSITable</maml:name><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package to apply to the product package. Multiple patches are applied in authored sequence order.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Query</maml:name><maml:description><maml:para>A custom query for which records are selected. Ambiguous column names must be prefixed with the table name to which they belong.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform to apply to the product package.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSITable</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>Table</maml:name><maml:description><maml:para>The table from which all records are selected. If no table name is provided all tables in the database are displayed.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package to apply to the product package. Multiple patches are applied in authored sequence order.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform to apply to the product package.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Get-MSITable</maml:name><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package to apply to the product package. Multiple patches are applied in authored sequence order.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Query</maml:name><maml:description><maml:para>A custom query for which records are selected. Ambiguous column names must be prefixed with the table name to which they belong.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform to apply to the product package.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>IgnoreMachineState</maml:name><maml:description><maml:para>Whether to apply any patches current installed to the product.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type><dev:defaultValue>false</dev:defaultValue></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to open. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package to apply to the product package. Multiple patches are applied in authored sequence order.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to open. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="1"><maml:name>Product</maml:name><maml:description><maml:para>An installed product to query.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Query</maml:name><maml:description><maml:para>A custom query for which records are selected. Ambiguous column names must be prefixed with the table name to which they belong.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>Table</maml:name><maml:description><maml:para>The table from which all records are selected. If no table name is provided all tables in the database are displayed.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform to apply to the product package.</maml:para><maml:para /><maml:para>Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:parameters><command:inputTypes><command:inputType><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>An existing product to query. By default any patches already applied to the product are applied to the database.</maml:para></maml:description></dev:type></command:inputType></command:inputTypes><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.Record</maml:name><maml:description><maml:para>Selected records for a table or custom query where properties match column names.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.TableInfo</maml:name><maml:description><maml:para>Information about a table contained in the database or added by a patch or transform.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msitable .\example.msi -table Property</dev:code><dev:remarks><maml:para>Gets all records from the Property table.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>$productCode = get-msitable .\example.msi -table Property | where-object { $_.Property -eq "ProductCode" } | select-object -expand Value</dev:code><dev:remarks><maml:para>Selects just the ProductCode property from the example.msi package and assigns the value to a variable.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 3 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-childitem -filter *.msi | get-msitable -query "SELECT ComponentId, FileName, FileSize FROM Component, File WHERE Component_ = Component"</dev:code><dev:remarks><maml:para>Selects the component GUID, file name, and file size for all files in all packages in the current directory.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 4 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msitable .\example.msi -query "SELECT ComponentId, FileName, File.Attributes FROM Component, File WHERE Component_ = Component" | where-object { $_.'File.Attributes'.HasVital }</dev:code><dev:remarks><maml:para>Selects all vital files and displays the component GUID, file name, and all file attribtes from the example.msi package.</maml:para><maml:para /><maml:para>Note that in the query filter the 'File.Attributes' column is contained in quotes; otherwise, Windows PowerShell will attempt to filter based on an Attributes property of a File property of the current pipeline object. The 'File.Attributes' column is contained in quotes in the original query because the Component table also contains a column named Attributes. Windows Installer requires that you disambiguate column names.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 5 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msitable .\example.msi -patch .\example.msp | get-msitable | where-object { $_.MSIOperation -ne 'None' }</dev:code><dev:remarks><maml:para>Gets all records in the example.msi package added or modified by the example.msp patch package.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 6 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo '{877EF582-78AF-4D84-888B-167FDC3BCC11}' | get-msitable -table Property</dev:code><dev:remarks><maml:para>Selects records from the installed product along with any patches currently installed.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIProductInfo</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Get-MSIProperty</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Install-MSIAdvertisedFeature</command:name><maml:description><maml:para>Installs advertised features.</maml:para></maml:description><command:verb>Install</command:verb><command:noun>MSIAdvertisedFeature</command:noun></command:details><maml:description><maml:para>Some or all features can be advertised for a product. This may be by design or incidental if certain patching problems occur. You can use this cmdlet to to install some or all advertise features for some or all products.</maml:para><maml:para /><maml:para>You can also scan for all advertised features using the -WhatIf parameter to see what would be done to your system without performing those operations. Use -Confirm if you want to approve the operation to each product.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Install-MSIAdvertisedFeature</maml:name><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>FeatureName</maml:name><maml:description><maml:para>One or more specific features to install. Feature names are case-sensitive.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="cf" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Confirm</maml:name><maml:description><maml:para>Confirm installing advertised features for each product.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Perform each operation without confirmation.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>One or more ProductCodes to limit which products are scanned for advertised features.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName, FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional properties to pass to the installation operation.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="wi" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>WhatIf</maml:name><maml:description><maml:para>Show what operations would be performed without actually performing them.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Install-MSIAdvertisedFeature</maml:name><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>FeatureName</maml:name><maml:description><maml:para>One or more specific features to install. Feature names are case-sensitive.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="cf" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Confirm</maml:name><maml:description><maml:para>Confirm installing advertised features for each product.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Perform each operation without confirmation.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Product</maml:name><maml:description><maml:para>One or more products passed through the pipeline to limit which products are scanned for advertised features.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName, FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional properties to pass to the installation operation.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="wi" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>WhatIf</maml:name><maml:description><maml:para>Show what operations would be performed without actually performing them.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="cf" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Confirm</maml:name><maml:description><maml:para>Confirm installing advertised features for each product.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>FeatureName</maml:name><maml:description><maml:para>One or more specific features to install. Feature names are case-sensitive.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Perform each operation without confirmation.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Product</maml:name><maml:description><maml:para>One or more products passed through the pipeline to limit which products are scanned for advertised features.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>One or more ProductCodes to limit which products are scanned for advertised features.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName, FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional properties to pass to the installation operation.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="wi" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>WhatIf</maml:name><maml:description><maml:para>Show what operations would be performed without actually performing them.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:parameters><command:inputTypes><command:inputType><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>An existing product for which advertised features should be installed.</maml:para></maml:description></dev:type></command:inputType></command:inputTypes><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>install-msiadvertisedfeature -whatif</dev:code><dev:remarks><maml:para>Scans all features in all products for advertised features and reports what operation would be performed.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo '{12341234-1234-1234-1234-123412341234}' | install-msiadvertisedfeature Complete</dev:code><dev:remarks><maml:para>Installs the 'Complete' feature for the specified product.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSIProductInfo</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Install-MSIProduct</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Install-MSIPatch</command:name><maml:description><maml:para>Installs a patch package or packages for all or only specified products.</maml:para></maml:description><command:verb>Install</command:verb><command:noun>MSIPatch</command:noun></command:details><maml:description><maml:para>You can install one or more patch packages to all installed targets products or to just a subset of products.</maml:para><maml:para /><maml:para>Progress, warnings, and errors during the install are sent through the pipeline making this command fully integrated.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Install-MSIPatch</maml:name><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a patch package to install. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed patch information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes to which the patch or patches should be applied.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during install.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>Machine</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Install-MSIPatch</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed patch information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>Information about a patch or patches to install to other products.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.PatchInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.PatchInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes to which the patch or patches should be applied.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during install.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>Machine</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Install-MSIPatch</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a patch package to install. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed patch information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes to which the patch or patches should be applied.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during install.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>Machine</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a patch package to install. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed patch information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>Information about a patch or patches to install to other products.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.PatchInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.PatchInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a patch package to install. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes to which the patch or patches should be applied.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during install.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>Machine</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.PatchInstallation</maml:name><maml:description><maml:para>Information for the newly installed patch or patches.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>install-msipatch .\example.msp MSIFASTINSTALL=2</dev:code><dev:remarks><maml:para>Install the example.msp patch package for all installed target products with MSIFASTINSTALL set to only do file costing before installation.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo -name TEST | install-msipatch .\example.msp -log $env:TEMP\patch.log -passthru</dev:code><dev:remarks><maml:para>Install the example.msp patch package only for the product with ProductName "TEST" and log to the TEMP directory.</maml:para><maml:para /><maml:para>Return information about the patch after logging.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Uninstall-MSIPatch</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Install-MSIProduct</command:name><maml:description><maml:para>Installs or modifies a product package.</maml:para></maml:description><command:verb>Install</command:verb><command:noun>MSIProduct</command:noun></command:details><maml:description><maml:para>Installs a product package or adds features to existing products.</maml:para><maml:para /><maml:para>Ultimately, this cmdlet can install, modify, repair, and even uninstall a product package or install patches but specialized cmdlets have been added for those tasks.</maml:para><maml:para /><maml:para>Progress, warnings, and errors during the install are sent through the pipeline making this command fully integrated.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Install-MSIProduct</maml:name><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to install. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="TargetDirectory" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Destination</maml:name><maml:description><maml:para>The target directory where the product should be installed.</maml:para><maml:para /><maml:para>Note that the product package must be authored to support installing to TARGETDIR.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed product information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during install.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Install-MSIProduct</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed product information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Product</maml:name><maml:description><maml:para>An existing product to modify.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during install.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Install-MSIProduct</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="TargetDirectory" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Destination</maml:name><maml:description><maml:para>The target directory where the product should be installed.</maml:para><maml:para /><maml:para>Note that the product package must be authored to support installing to TARGETDIR.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to install. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed product information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during install.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Install-MSIProduct</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed product information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode of an existing product to modify.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during install.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="TargetDirectory" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>Destination</maml:name><maml:description><maml:para>The target directory where the product should be installed.</maml:para><maml:para /><maml:para>Note that the product package must be authored to support installing to TARGETDIR.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to install. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed product information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to install. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Product</maml:name><maml:description><maml:para>An existing product to modify.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode of an existing product to modify.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during install.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:parameters><command:inputTypes><command:inputType><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>An existing product to modify.</maml:para></maml:description></dev:type></command:inputType></command:inputTypes><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>Information for the newly installed or modified product.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>install-msiproduct .\example.msi NOBLOCK=1</dev:code><dev:remarks><maml:para>Installs the example.msi product package passing the ficticious NOBLOCK=1 property.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo -name TEST | install-msiproduct ADDLOCAL=Addin -log $env:TEMP\install.log</dev:code><dev:remarks><maml:para>Modifies the existing product with ProductName TEST to add the "Addin" feature locally and log to the TEMP directory.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Install-MSIPatch</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Repair-MSIProduct</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Uninstall-MSIPatch</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Uninstall-MSIProduct</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Measure-MSIProduct</command:name><maml:description><maml:para>Gets drive costs for components that would be installed to any drive.</maml:para></maml:description><command:verb>Measure</command:verb><command:noun>MSIProduct</command:noun></command:details><maml:description><maml:para>You can use this command to get the costs for components that will be installed to any drive mounted to the system. If multiple product packages are specified the total costs for all components in all specified products are returned.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Measure-MSIProduct</maml:name><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to measure. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="TargetDirectory" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Destination</maml:name><maml:description><maml:para>The target directory where the product should be installed.</maml:para><maml:para /><maml:para>Note that the product package must be authored to support installing to TARGETDIR.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="false" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package or packages to apply to the product package before measuring. Patches are applied in sequence order.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional properties to pass to the session.</maml:para><maml:para /><maml:para>Note that you can mark all features for installation using ADDLOCAL=ALL or set public directories using this parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="false" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform or transforms to apply to the product package before measuring.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Measure-MSIProduct</maml:name><command:parameter aliases="TargetDirectory" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Destination</maml:name><maml:description><maml:para>The target directory where the product should be installed.</maml:para><maml:para /><maml:para>Note that the product package must be authored to support installing to TARGETDIR.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to measure. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="false" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package or packages to apply to the product package before measuring. Patches are applied in sequence order.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional properties to pass to the session.</maml:para><maml:para /><maml:para>Note that you can mark all features for installation using ADDLOCAL=ALL or set public directories using this parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="false" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform or transforms to apply to the product package before measuring.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="TargetDirectory" required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Destination</maml:name><maml:description><maml:para>The target directory where the product should be installed.</maml:para><maml:para /><maml:para>Note that the product package must be authored to support installing to TARGETDIR.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to measure. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="false" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package or packages to apply to the product package before measuring. Patches are applied in sequence order.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to measure. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional properties to pass to the session.</maml:para><maml:para /><maml:para>Note that you can mark all features for installation using ADDLOCAL=ALL or set public directories using this parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="false" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform or transforms to apply to the product package before measuring.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>System.Management.Automation.PSDriveInfo</maml:name><maml:description><maml:para>A PSDriveInfo object with MSISpaceRequired and MSITemporarySpaceRequired properties attached (measured in bytes).</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>measure-msiproduct .\example.msi -patch .\example.msp -target X:\Example</dev:code><dev:remarks><maml:para>Gets the drive costs for example.msi with example.msp applied if installed to the X:\Example directory.</maml:para><maml:para /></dev:remarks></command:example></command:examples></command:command><command:command><command:details><command:name>Remove-MSILoggingPolicy</command:name><maml:description><maml:para>Removes the Windows Installer logging policy.</maml:para></maml:description><command:verb>Remove</command:verb><command:noun>MSILoggingPolicy</command:noun></command:details><maml:description><maml:para>The Windows Installer logging policy determines whether logs are generated by default and how much information they contain. This cmdlet removes the current logging and debug policies.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Remove-MSILoggingPolicy</maml:name></command:syntaxItem></command:syntax><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSILoggingPolicy</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Set-MSILoggingPolicy</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Remove-MSISource</command:name><maml:description><maml:para>Removes a registered network source or URL from a product or patch.</maml:para></maml:description><command:verb>Remove</command:verb><command:noun>MSISource</command:noun></command:details><maml:description><maml:para>Windows Installer products and patches can have zero or more registered locations that direct Windows Installer where to look for package source. This cmdlet will remove a location registered to a product or patch and optionally return the remaining locations through the pipeline.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Remove-MSISource</maml:name><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode for a product or applied patch.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The directory or URL to unregister. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to return the remaining registered source through the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code for a patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user SID for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Remove-MSISource</maml:name><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode for a product or applied patch.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The directory or URL to unregister. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to return the remaining registered source through the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code for a patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user SID for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The directory or URL to unregister. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to return the remaining registered source through the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>PatchCode</maml:name><maml:description><maml:para>The patch code for a patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The directory or URL to unregister. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="0"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode for a product or applied patch.</maml:para></maml:description><command:parameterValue required="true" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>All</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user SID for a product or patch.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.SourceInfo</maml:name><maml:description><maml:para>Source information for an installed product.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.PatchSourceInfo</maml:name><maml:description><maml:para>Source information for an applied patch.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>remove-msisource '{707ABAE4-4DC5-478C-9D36-7CC5C1A85A3C}' 'C:\Package Cache\'</dev:code><dev:remarks><maml:para>Removes the C:\Package Cache source location from the specified product.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Add-MSISource</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Clear-MSISource</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Get-MSISource</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Repair-MSIProduct</command:name><maml:description><maml:para>Repairs or modifies a product package.</maml:para></maml:description><command:verb>Repair</command:verb><command:noun>MSIProduct</command:noun></command:details><maml:description><maml:para>By default, simply repairs an existing product. This cmdlet can also add or remove features, patches, or even uninstall but there are specialized cmdlets for that.</maml:para><maml:para /><maml:para>Progress, warnings, and errors during the install are sent through the pipeline making this command fully integrated.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Repair-MSIProduct</maml:name><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to repair. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed patch information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during repair.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ReinstallMode</maml:name><maml:description><maml:para>The REINSTALLMODE to use. You can specify the value as a string in the format used by Windows Installer. The default is equivalent to "omus".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.ReinstallModes</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ReinstallModes</maml:name></dev:type><dev:defaultValue>FileOlderVersion,MachineData,UserData,Shortcut</dev:defaultValue></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Repair-MSIProduct</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed patch information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Product</maml:name><maml:description><maml:para>An existing product to repair or modify.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during repair.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ReinstallMode</maml:name><maml:description><maml:para>The REINSTALLMODE to use. You can specify the value as a string in the format used by Windows Installer. The default is equivalent to "omus".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.ReinstallModes</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ReinstallModes</maml:name></dev:type><dev:defaultValue>FileOlderVersion,MachineData,UserData,Shortcut</dev:defaultValue></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Repair-MSIProduct</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to repair. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed patch information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during repair.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ReinstallMode</maml:name><maml:description><maml:para>The REINSTALLMODE to use. You can specify the value as a string in the format used by Windows Installer. The default is equivalent to "omus".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.ReinstallModes</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ReinstallModes</maml:name></dev:type><dev:defaultValue>FileOlderVersion,MachineData,UserData,Shortcut</dev:defaultValue></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Repair-MSIProduct</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed patch information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode of an existing product to repair or modify.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during repair.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ReinstallMode</maml:name><maml:description><maml:para>The REINSTALLMODE to use. You can specify the value as a string in the format used by Windows Installer. The default is equivalent to "omus".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.ReinstallModes</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ReinstallModes</maml:name></dev:type><dev:defaultValue>FileOlderVersion,MachineData,UserData,Shortcut</dev:defaultValue></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to repair. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Whether to pass the newly installed patch information after installation to the pipeline.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to repair. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Product</maml:name><maml:description><maml:para>An existing product to repair or modify.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode of an existing product to repair or modify.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during repair.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ReinstallMode</maml:name><maml:description><maml:para>The REINSTALLMODE to use. You can specify the value as a string in the format used by Windows Installer. The default is equivalent to "omus".</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.ReinstallModes</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ReinstallModes</maml:name></dev:type><dev:defaultValue>FileOlderVersion,MachineData,UserData,Shortcut</dev:defaultValue></command:parameter></command:parameters><command:inputTypes><command:inputType><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>The product to repair or modify.</maml:para></maml:description></dev:type></command:inputType></command:inputTypes><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>Information for the newly repaired product.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>repair-msiproduct -productcode {12341234-1234-1234-1234-123412341234} -reinstall "pecmsu" -log $env:TEMP\repair.log</dev:code><dev:remarks><maml:para>Repair the specified product using REINSTALLMODE="pecmsu" and log to the TEMP directory.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo -name *TEST* | repair-msiproduct -chain</dev:code><dev:remarks><maml:para>Repair all products with ProductName matching *TEST* and show a single progress bar for the entire operation.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Install-MSIProduct</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Uninstall-MSIProduct</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Set-MSILoggingPolicy</command:name><maml:description><maml:para>Sets the Windows Installer logging policy.</maml:para></maml:description><command:verb>Set</command:verb><command:noun>MSILoggingPolicy</command:noun></command:details><maml:description><maml:para>The Windows Installer logging policy determines whether logs are generated by default and how much information they contain. This cmdlet sets the logging policy and can return the logging modes as a collection of strings or the raw string value from the registry if -passthru is specified.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Set-MSILoggingPolicy</maml:name><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false" position="0"><maml:name>LoggingPolicy</maml:name><maml:description><maml:para>The logging mode to set in the registry. If "ExtraDebug" or "x" are set, the Debug policy is also set to 7; however, if neither are set the current Debug policy is not removed.</maml:para><maml:para /><maml:para>This can be a combination of "None", "ActionData", "ActionStart", "CommonData", "Error", "ExtraDebug", "FatalExit", "Information", "OutOfDiskSpace", "PropertyDump", "User", "Verbose", "Warning", "All", and "FlushEachLine"; or you can specify the Windows Installer command line options consisting of any combination of the characters "voicewarmupx!".</maml:para><maml:para /><maml:para>Note that "All" does not include "FlushEachLine", but is equivalent to "voicewarmupx".</maml:para></maml:description><command:parameterValue required="true" variableLength="false">Microsoft.Tools.WindowsInstaller.LoggingPolicies</command:parameterValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.LoggingPolicies</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Returns the logging modes set in the registry.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Raw</maml:name><maml:description><maml:para>Along with -passthru, returns the raw string value from the registry.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="true" variableLength="false" globbing="false" pipelineInput="false" position="0"><maml:name>LoggingPolicy</maml:name><maml:description><maml:para>The logging mode to set in the registry. If "ExtraDebug" or "x" are set, the Debug policy is also set to 7; however, if neither are set the current Debug policy is not removed.</maml:para><maml:para /><maml:para>This can be a combination of "None", "ActionData", "ActionStart", "CommonData", "Error", "ExtraDebug", "FatalExit", "Information", "OutOfDiskSpace", "PropertyDump", "User", "Verbose", "Warning", "All", and "FlushEachLine"; or you can specify the Windows Installer command line options consisting of any combination of the characters "voicewarmupx!".</maml:para><maml:para /><maml:para>Note that "All" does not include "FlushEachLine", but is equivalent to "voicewarmupx".</maml:para></maml:description><command:parameterValue required="true" variableLength="false">Microsoft.Tools.WindowsInstaller.LoggingPolicies</command:parameterValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.LoggingPolicies</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>PassThru</maml:name><maml:description><maml:para>Returns the logging modes set in the registry.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Raw</maml:name><maml:description><maml:para>Along with -passthru, returns the raw string value from the registry.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>string</maml:name><maml:description><maml:para>If -passthru and -raw are specified and a logging policy set, the raw registry value is returned.</maml:para></maml:description></dev:type></command:returnValue><command:returnValue><dev:type><maml:name>string[]</maml:name><maml:description><maml:para>If -passthru is specified, the default output type consisting of zero or more logging modes that are set in the registry.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><maml:relatedLinks><maml:navigationLink><maml:linkText>Get-MSILoggingPolicy</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Remove-MSILoggingPolicy</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Test-MSIProduct</command:name><maml:description><maml:para>Runs internal consistency evaluators (ICEs) against the product package or packages.</maml:para></maml:description><command:verb>Test</command:verb><command:noun>MSIProduct</command:noun></command:details><maml:description><maml:para>Internal consistency evaluators (ICEs) are custom actions that validate whether a product is authored as specified. If Orca or MsiVal2 is installed, the default ICE .cub ("ICE cube") file is used by default, and you can specify custom ICE cube.</maml:para><maml:para /><maml:para>You can also apply any number of patches or transforms before running ICEs. This allows you to evaluate a product that is transformed by, for example, a patch to also make sure the changes made by a patch or valid.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Test-MSIProduct</maml:name><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The path to a package to evaluate. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Cube" required="false" variableLength="true" globbing="false" pipelineInput="false" position="named"><maml:name>AdditionalCube</maml:name><maml:description><maml:para>One or more ICE .cub files to use for evaluation.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Exclude</maml:name><maml:description><maml:para>The names of ICEs to exclude from evaluation (all other ICEs are included).</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Include</maml:name><maml:description><maml:para>The names of ICEs to include from evaluation (all other ICEs are excluded).</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>NoDefault</maml:name><maml:description><maml:para>Do not import darice.cub if installed with Orca or MsiVal2.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package or packages to apply to the product package before evaluation. Patches are applied in sequence order.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform or transforms to apply to the product package before evaluation.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Test-MSIProduct</maml:name><command:parameter aliases="Cube" required="false" variableLength="true" globbing="false" pipelineInput="false" position="named"><maml:name>AdditionalCube</maml:name><maml:description><maml:para>One or more ICE .cub files to use for evaluation.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Exclude</maml:name><maml:description><maml:para>The names of ICEs to exclude from evaluation (all other ICEs are included).</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Include</maml:name><maml:description><maml:para>The names of ICEs to include from evaluation (all other ICEs are excluded).</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a package to evaluate. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>NoDefault</maml:name><maml:description><maml:para>Do not import darice.cub if installed with Orca or MsiVal2.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package or packages to apply to the product package before evaluation. Patches are applied in sequence order.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform or transforms to apply to the product package before evaluation.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter aliases="Cube" required="false" variableLength="true" globbing="false" pipelineInput="false" position="named"><maml:name>AdditionalCube</maml:name><maml:description><maml:para>One or more ICE .cub files to use for evaluation.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Exclude</maml:name><maml:description><maml:para>The names of ICEs to exclude from evaluation (all other ICEs are included).</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Include</maml:name><maml:description><maml:para>The names of ICEs to include from evaluation (all other ICEs are excluded).</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a package to evaluate. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>NoDefault</maml:name><maml:description><maml:para>Do not import darice.cub if installed with Orca or MsiVal2.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>The path to a patch package or packages to apply to the product package before evaluation. Patches are applied in sequence order.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="1"><maml:name>Path</maml:name><maml:description><maml:para>The path to a package to evaluate. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="true" pipelineInput="false" position="named"><maml:name>Transform</maml:name><maml:description><maml:para>The path to a transform or transforms to apply to the product package before evaluation.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:parameters><command:returnValues><command:returnValue><dev:type><maml:name>Microsoft.Tools.WindowsInstaller.IceMessage</maml:name><maml:description><maml:para>Information generated from each ICE. Specifying -Verbose will show additional information from each ICE.</maml:para></maml:description></dev:type></command:returnValue></command:returnValues><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>test-msiproduct .\example.msi -include ICE0* -exclude ICE03 -v</dev:code><dev:remarks><maml:para>Output all messages from ICEs 01 through 09 except for ICE03.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>test-msiproduct .\example.msi -patch .\example.msp -add .\tests\custom.cub</dev:code><dev:remarks><maml:para>Apply example.msp to example.msi, then run all the default and custom ICEs.</maml:para><maml:para /></dev:remarks></command:example></command:examples></command:command><command:command><command:details><command:name>Uninstall-MSIPatch</command:name><maml:description><maml:para>Installs a patch package or packages for all or only specified products.</maml:para></maml:description><command:verb>Uninstall</command:verb><command:noun>MSIPatch</command:noun></command:details><maml:description><maml:para>Uninstalls one or more packages from all products which they're applied or only from the specified set of products based on their ProductCode.</maml:para><maml:para /><maml:para>Progress, warnings, and errors during the install are sent through the pipeline making this command fully integrated.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Uninstall-MSIPatch</maml:name><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a patch package to uninstall. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes from which patches are removed.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during uninstall.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>Machine</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Uninstall-MSIPatch</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>Information about a patch or patches to uninstall.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.PatchInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.PatchInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes from which patches are removed.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during uninstall.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>Machine</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Uninstall-MSIPatch</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a patch package to uninstall. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes from which patches are removed.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during uninstall.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>Machine</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a patch package to uninstall. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Patch</maml:name><maml:description><maml:para>Information about a patch or patches to uninstall.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.PatchInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.PatchInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a patch package to uninstall. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode or ProductCodes from which patches are removed.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during uninstall.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter aliases="Context InstallContext" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserContext</maml:name><maml:description><maml:para>The user context for the product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">Microsoft.Deployment.WindowsInstaller.UserContexts</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.UserContexts</maml:name></dev:type><dev:defaultValue>Machine</dev:defaultValue></command:parameter><command:parameter aliases="User" required="false" variableLength="false" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>UserSid</maml:name><maml:description><maml:para>The user security identifier for product listed in the ProductCode parameter.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter></command:parameters><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductifo -name TEST | get-msipatchinfo | uninstall-msipatch -log $env:TEMP\unpatch.log</dev:code><dev:remarks><maml:para>Uninstalls all patches applied to the product with ProductName TEST and logs to the TEMP directory.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Install-MSIPatch</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command><command:command><command:details><command:name>Uninstall-MSIProduct</command:name><maml:description><maml:para>Uninstalls a product package or packages, or an existing product on the machine.</maml:para></maml:description><command:verb>Uninstall</command:verb><command:noun>MSIProduct</command:noun></command:details><maml:description><maml:para>This cmdlet, unlike related cmdlets, is designed to uninstalled one or more products. While there are ways to override this behavior, it is not recommend and you should instead use specialized cmdlets for this purpose. See the related links for suggestions.</maml:para><maml:para /><maml:para>Progress, warnings, and errors during the install are sent through the pipeline making this command fully integrated.</maml:para></maml:description><command:syntax><command:syntaxItem><maml:name>Uninstall-MSIProduct</maml:name><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to uninstall. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during uninstall.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Uninstall-MSIProduct</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Product</maml:name><maml:description><maml:para>The product to uninstall.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during uninstall.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Uninstall-MSIProduct</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to uninstall. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during uninstall.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem><command:syntaxItem><maml:name>Uninstall-MSIProduct</maml:name><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode of a product to uninstall.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during uninstall.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:syntaxItem></command:syntax><command:parameters><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Chain</maml:name><maml:description><maml:para>Whether to install all packages together. If elevated, a single restore point is created for all packages in the chain.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Force</maml:name><maml:description><maml:para>Whether to suppress all prompts.</maml:para></maml:description><dev:type><maml:name>SwitchParameter</maml:name></dev:type></command:parameter><command:parameter aliases="PSPath" required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>LiteralPath</maml:name><maml:description><maml:para>The path to a product package to uninstall. The value of -LiteralPath is used exactly as typed. No characters are interpreted as wildcards.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="false" globbing="false" pipelineInput="false" position="named"><maml:name>Log</maml:name><maml:description><maml:para>The path to the log file. This use the file name as the base name and will append timestamp and product-specific information.</maml:para></maml:description><command:parameterValue required="false" variableLength="false">String</command:parameterValue><dev:type><maml:name>String</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="true" pipelineInput="true (ByValue, ByPropertyName)" position="0"><maml:name>Path</maml:name><maml:description><maml:para>The path to a product package to uninstall. Wildcards are permitted. You can specify * in any part of the path to select all matching files.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByValue)" position="named"><maml:name>Product</maml:name><maml:description><maml:para>The product to uninstall.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</command:parameterValue><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation[]</maml:name></dev:type></command:parameter><command:parameter required="true" variableLength="true" globbing="false" pipelineInput="true (ByPropertyName)" position="named"><maml:name>ProductCode</maml:name><maml:description><maml:para>The ProductCode of a product to uninstall.</maml:para></maml:description><command:parameterValue required="true" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter><command:parameter required="false" variableLength="true" globbing="false" pipelineInput="true (FromRemainingArguments)" position="named"><maml:name>Properties</maml:name><maml:description><maml:para>Additional property=value pairs to pass during uninstall.</maml:para></maml:description><command:parameterValue required="false" variableLength="true">string[]</command:parameterValue><dev:type><maml:name>string[]</maml:name></dev:type></command:parameter></command:parameters><command:inputTypes><command:inputType><dev:type><maml:name>Microsoft.Deployment.WindowsInstaller.ProductInstallation</maml:name><maml:description><maml:para>The product to uninstall.</maml:para></maml:description></dev:type></command:inputType></command:inputTypes><command:examples><command:example><maml:title>-------------- EXAMPLE 1 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>uninstall-msiproduct .\example.msi -log $env:TEMP\uninstall.log</dev:code><dev:remarks><maml:para>Uninstall the example.msi product package and log to the TEMP directory.</maml:para><maml:para /></dev:remarks></command:example><command:example><maml:title>-------------- EXAMPLE 2 --------------</maml:title><maml:introduction><maml:para>C:\PS></maml:para></maml:introduction><dev:code>get-msiproductinfo -name *TEST* | uninstall-msiproduct -chain</dev:code><dev:remarks><maml:para>Uninstall all products with ProductName matching *TEST* and show a single progress bar for the entire operation.</maml:para><maml:para /></dev:remarks></command:example></command:examples><maml:relatedLinks><maml:navigationLink><maml:linkText>Install-MSIProduct</maml:linkText></maml:navigationLink><maml:navigationLink><maml:linkText>Repair-MSIProduct</maml:linkText></maml:navigationLink></maml:relatedLinks></command:command></helpItems>
#Requires -Version 2.0
# Copyright (C) Microsoft Corporation. All rights reserved.
#
# THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
# KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
# PARTICULAR PURPOSE.
$script:loc = data {
convertfrom-stringdata @'
AdvtCaption = Confirm install
AdvtDescription = Installing advertised features for product, {0}.
AdvtWarning = Are you sure you want to install advertised features for product, {0}?
'@
}
import-localizeddata -bind loc -filename Resources.psd1 -ea SilentlyContinue
function Get-MSIComponentState
{
# .ExternalHelp Microsoft.Tools.WindowsInstaller.PowerShell.dll-Help.xml
[CmdletBinding(DefaultParameterSetName = "Product")]
param
(
[Parameter(ParameterSetName = "Product", Position = 0, Mandatory = $true, ValueFromPipeline = $true)]
[Microsoft.Deployment.WindowsInstaller.ProductInstallation[]] $Product,
[Parameter(ParameterSetName = "ProductCode", Position = 0, Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
[Microsoft.Tools.WindowsInstaller.PowerShell.ValidateGuid()]
[string[]] $ProductCode,
[Parameter(ParameterSetName = "ProductCode", ValueFromPipelineByPropertyName = $true)]
[Alias("Context", "InstallContext")]
[Microsoft.Deployment.WindowsInstaller.UserContexts] $UserContext = "All",
[Parameter(ParameterSetName = "ProductCode", ValueFromPipelineByPropertyName = $true)]
[Microsoft.Tools.WindowsInstaller.PowerShell.Sid()]
[string] $UserSid
)
process
{
if ($PSCmdlet.ParameterSetName -eq "ProductCode")
{
$Product = @(,(get-msiproductinfo @PSBoundParameters))
}
$Product | foreach-object {
[string] $productCode = $_.ProductCode
# Get the state of every authored component in the product and applied patches.
$_ | get-msitable -table Component | foreach-object {
# Attach authored information from the product package to the output object.
$_ | get-msicomponentinfo -productcode $productCode `
| foreach-object { $_.PSTypeNames.Insert(0, $_.PSTypeNames[0] + "#State"); $_ } `
| add-member -type NoteProperty -name Component -value $_.Component -passthru
}
}
}
}
function Get-MSISharedComponentInfo
{
# .ExternalHelp Microsoft.Tools.WindowsInstaller.PowerShell.dll-Help.xml
[CmdletBinding()]
param
(
[Parameter(Position = 0)]
[ValidateNotNullOrEmpty()]
[Microsoft.Tools.WindowsInstaller.PowerShell.ValidateGuid()]
[string[]] $ComponentCode,
[Parameter(Position = 1)]
[ValidateRange(2, 2147483647)]
[int] $Count = 2
)
end
{
$getcomponents = { get-msicomponentinfo }
if ($ComponentCode)
{
$getcomponents = { get-msicomponentinfo -componentcode $ComponentCode }
}
& $getcomponents | group-object -property ComponentCode | where-object { $_.Count -ge $Count } `
| select-object -expand Group
}
}
function Install-MSIAdvertisedFeature
{
# .ExternalHelp Microsoft.Tools.WindowsInstaller.PowerShell.dll-Help.xml
[CmdletBinding(DefaultParameterSetName = "ProductCode", ConfirmImpact = "Medium", SupportsShouldProcess = $true)]
param
(
[Parameter(ParameterSetName = "ProductCode", ValueFromPipelineByPropertyName = $true)]
[ValidateNotNullOrEmpty()]
[Microsoft.Tools.WindowsInstaller.PowerShell.ValidateGuid()]
[string[]] $ProductCode,
[Parameter(ParameterSetName = "Product", Mandatory = $true, ValueFromPipeline = $true)]
[Microsoft.Deployment.WindowsInstaller.ProductInstallation[]] $Product,
[Parameter(Position = 0, ValueFromPipelineByPropertyName = $true)]
[ValidateNotNullOrEmpty()]
[string[]] $FeatureName,
[Parameter()]
[switch] $Force,
[Parameter(ValueFromPipelineByPropertyName = $true, ValueFromRemainingArguments = $true)]
[string[]] $Properties
)
begin
{
$YesToAll = $false
$NoToAll = $false
}
process
{
# Get only specified or all products given a ProductCode.
if ($PSBoundParameters.ContainsKey("ProductCode"))
{
$Product = get-msiproductinfo -productcode $ProductCode
}
elseif ($PSCmdlet.ParameterSetName -eq "ProductCode")
{
$Product = get-msiproductinfo
}
# Get only specified or all features for each selected product.
if ($PSBoundParameters.ContainsKey("FeatureName"))
{
$features = $Product | foreach-object {
get-msifeatureinfo -productcode $_.ProductCode -featurename $FeatureName
}
}
else
{
$features = $Product | get-msifeatureinfo
}
# Construct and splat the necessary parameters to re-install each product.
$features | where-object { $_.State -eq "Advertised" } | group-object ProductCode | foreach-object {
$params = @{
"ProductCode" = $_.Name;
"Properties" = "$Properties ADDLOCAL=$(($_.Group | select-object -expand Name) -join ',')"
}
# Get the advertised product name from the existing collection so we don't cause a reentrance issue.
$name = $_.Name
$name = $Product | where-object { $_.ProductCode -eq $name } | select-object -expand AdvertisedProductName
$description = $script:loc.AdvtDescription -f $name
$warning = $script:loc.AdvtWarning -f $name
if ($PSCmdlet.ShouldProcess($description, $warning, $script:loc.AdvtCaption))
{
if ($Force -or $PSCmdlet.ShouldContinue($null, $null, [ref] $YesToAll, [ref] $NoToAll))
{
install-msiproduct @params
}
}
}
}
}
# Update the usage information for this module if installed.
[Microsoft.Tools.WindowsInstaller.PowerShell.Module]::Use()
# Copyright (C) Microsoft Corporation. All rights reserved.
#
# THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
# KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
# IMPLIED WARRANTIES OF MERCHANTABILITY ANDOR FITNESS FOR A
# PARTICULAR PURPOSE.
try
{
$InstallPath = Split-Path (Split-Path $MyInvocation.MyCommand.Definition)
# Append the install folder to the end of the any existing PSModulePath.
$PSModulePath = [Environment]::GetEnvironmentVariable('PSModulePath', 'User')
if ($PSModulePath) { $PSModulePath += ';' }
$PSModulePath += $InstallPath
Install-ChocolateyEnvironmentVariable 'PSModulePath' $PSModulePath -VariableType 'User'
Write-ChocolateySuccess 'psmsi'
}
catch
{
Write-ChocolateyFailure 'psmsi' "$($_.Exception.Message)"
throw
}
# Copyright (C) Microsoft Corporation. All rights reserved.
#
# THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
# KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
# IMPLIED WARRANTIES OF MERCHANTABILITY ANDOR FITNESS FOR A
# PARTICULAR PURPOSE.
try
{
$InstallPath = Split-Path (Split-Path $MyInvocation.MyCommand.Definition)
$PSModulePath = ([Environment]::GetEnvironmentVariable('PSModulePath', 'User') -split ';' | where-Object { $_ -ne $InstallPath }) -join ';'
Install-ChocolateyEnvironmentVariable 'PSModulePath' $PSModulePath -VariableType 'User'
Write-ChocolateySuccess 'psmsi'
}
catch
{
Write-ChocolateyFailure 'psmsi' "$($_.Exception.Message)"
throw
}
Log in or click on link to see number of positives.
- psmsi.2.3.0.1.nupkg (461e84192578) - ## / 56
- Microsoft.Deployment.Compression.Cab.dll (ce7c3526d1b6) - ## / 54
- Microsoft.Deployment.Compression.dll (c7c8a129b27e) - ## / 54
- Microsoft.Deployment.WindowsInstaller.dll (8fa1248b8aef) - ## / 52
- Microsoft.Deployment.WindowsInstaller.Package.dll (63b5ad6c7bca) - ## / 54
- Microsoft.Tools.WindowsInstaller.PowerShell.dll (999aae19280f) - ## / 55
In cases where actual malware is found, the packages are subject to removal. Software sometimes has false positives. Moderators do not necessarily validate the safety of the underlying software, only that a package retrieves software from the official distribution point and/or validate embedded software against official distribution point (where distribution rights allow redistribution).
Chocolatey Pro provides runtime protection from possible malware.
Add to Builder | Version | Downloads | Last Updated | Status |
---|---|---|---|---|
psmsi 2.3.0.1 | 1756 | Saturday, August 15, 2015 | Approved | |
psmsi 2.3.0.0 | 628 | Saturday, December 27, 2014 | Approved |
-
- chocolatey (≥ 0.9.8.20)
Ground Rules:
- This discussion is only about psmsi and the psmsi package. If you have feedback for Chocolatey, please contact the Google Group.
- This discussion will carry over multiple versions. If you have a comment about a particular version, please note that in your comments.
- The maintainers of this Chocolatey Package will be notified about new comments that are posted to this Disqus thread, however, it is NOT a guarantee that you will get a response. If you do not hear back from the maintainers after posting a message below, please follow up by using the link on the left side of this page or follow this link to contact maintainers. If you still hear nothing back, please follow the package triage process.
- Tell us what you love about the package or psmsi, or tell us what needs improvement.
- Share your experiences with the package, or extra configuration or gotchas that you've found.
- If you use a url, the comment will be flagged for moderation until you've been whitelisted. Disqus moderated comments are approved on a weekly schedule if not sooner. It could take between 1-5 days for your comment to show up.