LISSTech.SoftwareManager.dll-help.xml

<?xml version="1.0" encoding="utf-8"?>
<helpItems schema="maml" xmlns="http://msh">
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Get-SoftwareProduct</command:name>
      <command:verb>Get</command:verb>
      <command:noun>SoftwareProduct</command:noun>
      <maml:description>
        <maml:para>Gets information about installed software products.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The Get-SoftwareProduct cmdlet retrieves detailed information about software products installed on the system. To source the information the cmdlet queries Windows Registry. The cmdlet queries both 32-bit and 64-bit registry views and both machine and current user hives. The cmdlet returns an object for each software product that matches the specified criteria. The object contains the product's display name, display version, whether the product is a user component, whether the product is a 32-bit component, and the uninstall command for the product.</maml:para>
      <maml:para>The uninstall command contains the file path and argument list for the uninstall command. The cmdlet parses both 'QuietUninstallString' and 'UninstallString' registry values to construct the uninstall command. If the 'QuietUninstallString' is empty, the cmdlet uses the 'UninstallString' value instead.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Get-SoftwareProduct</maml:name>
        <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="Name">
          <maml:name>DisplayName</maml:name>
          <maml:description>
            <maml:para>Specifies the display name of the software product(s) to retrieve. The value of DisplayName supports wildcard characters: ? (single character) and * (one or more characters) for case-insensitive matching. If the display name includes escape characters, enclose it in single quotation marks. Single quotation marks tell PowerShell not to interpret any characters as escape sequences.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-SoftwareProduct</maml:name>
        <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="Name">
          <maml:name>DisplayName</maml:name>
          <maml:description>
            <maml:para>Specifies the display name of the software product(s) to retrieve. The value of DisplayName supports wildcard characters: ? (single character) and * (one or more characters) for case-insensitive matching. If the display name includes escape characters, enclose it in single quotation marks. Single quotation marks tell PowerShell not to interpret any characters as escape sequences.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="Version">
          <maml:name>DisplayVersion</maml:name>
          <maml:description>
            <maml:para>Specifies the exact version of the software product to retrieve. If you specify this parameter, the cmdlet will only return software products whose display name matches the value of the 'DisplayName' parameter and where the software product's display version is equal to this parameter's value.</maml:para>
            <maml:para>This parameter is mandatory when using the 'DisplayVersion' parameter set.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Version</command:parameterValue>
          <dev:type>
            <maml:name>Version</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-SoftwareProduct</maml:name>
        <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="Name">
          <maml:name>DisplayName</maml:name>
          <maml:description>
            <maml:para>Specifies the display name of the software product(s) to retrieve. The value of DisplayName supports wildcard characters: ? (single character) and * (one or more characters) for case-insensitive matching. If the display name includes escape characters, enclose it in single quotation marks. Single quotation marks tell PowerShell not to interpret any characters as escape sequences.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="Max">
          <maml:name>MaxVersion</maml:name>
          <maml:description>
            <maml:para>Specifies the maximum version of the software product to retrieve. If you specify this parameter, the cmdlet will only return software products whose display name matches the value of the 'DisplayName' parameter and where the software product's display version is less than or equal to this parameter's value.</maml:para>
            <maml:para>This parameter is mandatory when using the 'MaxVersion' parameter set.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Version</command:parameterValue>
          <dev:type>
            <maml:name>Version</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Get-SoftwareProduct</maml:name>
        <command:parameter required="true" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="Name">
          <maml:name>DisplayName</maml:name>
          <maml:description>
            <maml:para>Specifies the display name of the software product(s) to retrieve. The value of DisplayName supports wildcard characters: ? (single character) and * (one or more characters) for case-insensitive matching. If the display name includes escape characters, enclose it in single quotation marks. Single quotation marks tell PowerShell not to interpret any characters as escape sequences.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="Min">
          <maml:name>MinVersion</maml:name>
          <maml:description>
            <maml:para>Specifies the minimum version of the software product to retrieve. If you specify this parameter, the cmdlet will only return software products whose display name matches the value of the 'DisplayName' parameter and where the software product's display version is greater than or equal to this parameter's value.</maml:para>
            <maml:para>This parameter is mandatory when using the 'MinVersion' parameter set.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Version</command:parameterValue>
          <dev:type>
            <maml:name>Version</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="true" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="Name">
        <maml:name>DisplayName</maml:name>
        <maml:description>
          <maml:para>Specifies the display name of the software product(s) to retrieve. The value of DisplayName supports wildcard characters: ? (single character) and * (one or more characters) for case-insensitive matching. If the display name includes escape characters, enclose it in single quotation marks. Single quotation marks tell PowerShell not to interpret any characters as escape sequences.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="Version">
        <maml:name>DisplayVersion</maml:name>
        <maml:description>
          <maml:para>Specifies the exact version of the software product to retrieve. If you specify this parameter, the cmdlet will only return software products whose display name matches the value of the 'DisplayName' parameter and where the software product's display version is equal to this parameter's value.</maml:para>
          <maml:para>This parameter is mandatory when using the 'DisplayVersion' parameter set.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Version</command:parameterValue>
        <dev:type>
          <maml:name>Version</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="Max">
        <maml:name>MaxVersion</maml:name>
        <maml:description>
          <maml:para>Specifies the maximum version of the software product to retrieve. If you specify this parameter, the cmdlet will only return software products whose display name matches the value of the 'DisplayName' parameter and where the software product's display version is less than or equal to this parameter's value.</maml:para>
          <maml:para>This parameter is mandatory when using the 'MaxVersion' parameter set.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Version</command:parameterValue>
        <dev:type>
          <maml:name>Version</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="Min">
        <maml:name>MinVersion</maml:name>
        <maml:description>
          <maml:para>Specifies the minimum version of the software product to retrieve. If you specify this parameter, the cmdlet will only return software products whose display name matches the value of the 'DisplayName' parameter and where the software product's display version is greater than or equal to this parameter's value.</maml:para>
          <maml:para>This parameter is mandatory when using the 'MinVersion' parameter set.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Version</command:parameterValue>
        <dev:type>
          <maml:name>Version</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>System.String[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.Version</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>LISSTech.SoftwareManager.SoftwareProduct</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>PS C:\&gt; Get-SoftwareProduct -DisplayName "Google Chrome"
 
DisplayName : Google Chrome
DisplayVersion : 128.0.6613.86
Publisher : Google LLC
InstallDate : 9/18/2024 12:00:00 AM
IsUserComponent : False
Is32BitComponent : False
UninstallCommand : msiexec.exe</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>PS C:\&gt; "Google Chrome",'Zoom Workplace (64-bit)' | Get-SoftwareProduct
 
DisplayName : Google Chrome
DisplayVersion : 128.0.6613.86
Publisher : Google LLC
InstallDate : 9/18/2024 12:00:00 AM
IsUserComponent : False
Is32BitComponent : False
UninstallCommand : msiexec.exe
 
DisplayName : Zoom Workplace (64-bit)
DisplayVersion : 6.2.46690
Publisher : Zoom
InstallDate : 9/18/2024 12:00:00 AM
IsUserComponent : False
Is32BitComponent : False
UninstallCommand : msiexec.exe</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 3 --------------------------</maml:title>
        <dev:code>PS C:\&gt; Get-SoftwareProduct -DisplayName "Google Chrome" -DisplayVersion 128.0.6613.86
 
DisplayName : Google Chrome
DisplayVersion : 128.0.6613.86
Publisher : Google LLC
InstallDate : 9/18/2024 12:00:00 AM
IsUserComponent : False
Is32BitComponent : False
UninstallCommand : msiexec.exe</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 4 --------------------------</maml:title>
        <dev:code>PS C:\&gt; Get-SoftwareProduct -DisplayName "Google Chrome" -MaxVersion 129.0
 
DisplayName : Google Chrome
DisplayVersion : 128.0.6613.86
Publisher : Google LLC
InstallDate : 9/18/2024 12:00:00 AM
IsUserComponent : False
Is32BitComponent : False
UninstallCommand : msiexec.exe</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 5 --------------------------</maml:title>
        <dev:code>PS C:\&gt; Get-SoftwareProduct -DisplayName "Google Chrome" -MinVersion 109.1
 
DisplayName : Google Chrome
DisplayVersion : 128.0.6613.86
Publisher : Google LLC
InstallDate : 9/18/2024 12:00:00 AM
IsUserComponent : False
Is32BitComponent : False
UninstallCommand : msiexec.exe</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 6 --------------------------</maml:title>
        <dev:code>PS C:\&gt; Get-SoftwareProduct
 
DisplayName : 1Password
DisplayVersion : 8.10.45
Publisher : AgileBits Inc.
InstallDate : 9/6/2024 12:00:00 AM
IsUserComponent : True
Is32BitComponent : False
UninstallCommand : msiexec.exe
 
DisplayName : 3CXMultilineTAPI
DisplayVersion : 1.0.33
Publisher : 3CX
InstallDate : 1/24/2024 12:00:00 AM
IsUserComponent : False
Is32BitComponent : False
UninstallCommand : msiexec.exe
 
DisplayName : 7-Zip 24.08 (x64)
DisplayVersion : 24.8
Publisher : Igor Pavlov
InstallDate :
IsUserComponent : False
Is32BitComponent : False
UninstallCommand : msiexec.exe
 
DisplayName : Adobe Acrobat (64-bit)
DisplayVersion : 24.3.20112
Publisher : Adobe
InstallDate : 9/18/2024 12:00:00 AM
IsUserComponent : False
Is32BitComponent : False
UninstallCommand : msiexec.exe
 
DisplayName : Adobe Creative Cloud
DisplayVersion : 6.4.0.361
Publisher : Adobe Inc.
InstallDate :
IsUserComponent : False
Is32BitComponent : True
UninstallCommand : msiexec.exe</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Install-SoftwareProduct</command:name>
      <command:verb>Install</command:verb>
      <command:noun>SoftwareProduct</command:noun>
      <maml:description>
        <maml:para>Installs software products from MSI or EXE packages.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The Install-SoftwareProduct cmdlet installs software from MSI or EXE installer packages. For MSI packages, it automatically applies silent installation flags (/qn /norestart) and creates timestamped log files in the TEMP directory. The cmdlet extracts ProductName and ProductVersion from MSI packages using the Windows Installer COM API. It supports automatic retry with exponential backoff for transient errors (exit codes 1618, 1612, 1619) and provides detailed error diagnostics for exit code 1603 by analyzing the MSI log file.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Install-SoftwareProduct</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
          <maml:name>FilePath</maml:name>
          <maml:description>
            <maml:para>Specifies the path to the installer package file. Supports MSI and EXE files. MSI packages are automatically installed silently using msiexec.exe.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">FileInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileInfo</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="2" aliases="none">
          <maml:name>ArgumentList</maml:name>
          <maml:description>
            <maml:para>Additional command-line arguments to pass to the installer. For MSI packages, these are appended to the default msiexec arguments. For EXE packages, these are passed directly to the executable.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
          <dev:type>
            <maml:name>String[]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="3" aliases="none">
          <maml:name>LogFilePath</maml:name>
          <maml:description>
            <maml:para>Specifies the path for the installation log file. For MSI packages, if not specified, a timestamped logfile is automatically created in the TEMP directory.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">FileInfo</command:parameterValue>
          <dev:type>
            <maml:name>FileInfo</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>RetryCount</maml:name>
          <maml:description>
            <maml:para>Specifies the number of retry attempts for transient installation errors (exit codes 1618, 1612, 1619). Valid values are 0 to 10. The default value is 3.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
          <maml:name>RetryWaitTime</maml:name>
          <maml:description>
            <maml:para>Specifies the initial wait time in seconds between retry attempts. Uses exponential backoff (wait time doubles with each retry). Valid values are 1 to 300. The default value is 30.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
          <dev:type>
            <maml:name>Int32</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="2" aliases="none">
        <maml:name>ArgumentList</maml:name>
        <maml:description>
          <maml:para>Additional command-line arguments to pass to the installer. For MSI packages, these are appended to the default msiexec arguments. For EXE packages, these are passed directly to the executable.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String[]</command:parameterValue>
        <dev:type>
          <maml:name>String[]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
        <maml:name>FilePath</maml:name>
        <maml:description>
          <maml:para>Specifies the path to the installer package file. Supports MSI and EXE files. MSI packages are automatically installed silently using msiexec.exe.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">FileInfo</command:parameterValue>
        <dev:type>
          <maml:name>FileInfo</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="3" aliases="none">
        <maml:name>LogFilePath</maml:name>
        <maml:description>
          <maml:para>Specifies the path for the installation log file. For MSI packages, if not specified, a timestamped logfile is automatically created in the TEMP directory.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">FileInfo</command:parameterValue>
        <dev:type>
          <maml:name>FileInfo</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>RetryCount</maml:name>
        <maml:description>
          <maml:para>Specifies the number of retry attempts for transient installation errors (exit codes 1618, 1612, 1619). Valid values are 0 to 10. The default value is 3.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="none">
        <maml:name>RetryWaitTime</maml:name>
        <maml:description>
          <maml:para>Specifies the initial wait time in seconds between retry attempts. Uses exponential backoff (wait time doubles with each retry). Valid values are 1 to 300. The default value is 30.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">Int32</command:parameterValue>
        <dev:type>
          <maml:name>Int32</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>System.IO.FileInfo</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.String[]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Void</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para>This cmdlet requires administrator privileges to install software.</maml:para>
        <maml:para>For MSI packages, the following default msiexec arguments are applied automatically:</maml:para>
        <maml:para>- /package "&lt;FilePath&gt;" - Specifies the MSI package to install</maml:para>
        <maml:para>- /qn - Silent installation with no user interface</maml:para>
        <maml:para>- /norestart - Suppresses automatic restart after installation</maml:para>
        <maml:para>- /l*v "&lt;LogFilePath&gt;" - Verbose logging to the specified logfile</maml:para>
        <maml:para></maml:para>
        <maml:para>The cmdlet automatically retries installation for the following transient Windows Installer exit codes:</maml:para>
        <maml:para>- 1618: Another installation is already in progress</maml:para>
        <maml:para>- 1612: Installation source is unavailable</maml:para>
        <maml:para>- 1619: Package could not be opened</maml:para>
        <maml:para></maml:para>
        <maml:para>For exit code 1603 (fatal error), the cmdlet analyzes the MSI log file and reports common issues such as insufficient disk space, access denied, missing prerequisites, pending reboots, and custom action failures.</maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------- Example 1: Install an MSI package --------------</maml:title>
        <dev:code>PS C:\&gt; Install-SoftwareProduct -FilePath "C:\Installers\application.msi"</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>--- Example 2: Install an MSI package with custom properties ---</maml:title>
        <dev:code>PS C:\&gt; Install-SoftwareProduct -FilePath "C:\Installers\application.msi" -ArgumentList "INSTALLDIR=D:\Apps", "ADDLOCAL=ALL"</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>---- Example 3: Install an EXE package with silent switches ----</maml:title>
        <dev:code>PS C:\&gt; Install-SoftwareProduct -FilePath "C:\Installers\setup.exe" -ArgumentList "/S", "/v/qn"</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------- Example 4: Install with custom retry settings --------</maml:title>
        <dev:code>PS C:\&gt; Install-SoftwareProduct -FilePath "C:\Installers\application.msi" -RetryCount 5 -RetryWaitTime 60</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>------ Example 5: Preview installation without executing ------</maml:title>
        <dev:code>PS C:\&gt; Install-SoftwareProduct -FilePath "C:\Installers\application.msi" -WhatIf</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>---- Example 6: Install multiple packages from a directory ----</maml:title>
        <dev:code>PS C:\&gt; Get-ChildItem -Path "C:\Installers" -Filter "*.msi" | Install-SoftwareProduct</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks>
      <maml:navigationLink>
        <maml:linkText>Get-SoftwareProduct</maml:linkText>
        <maml:uri></maml:uri>
      </maml:navigationLink>
      <maml:navigationLink>
        <maml:linkText>Uninstall-SoftwareProduct</maml:linkText>
        <maml:uri></maml:uri>
      </maml:navigationLink>
    </command:relatedLinks>
  </command:command>
  <command:command xmlns:maml="http://schemas.microsoft.com/maml/2004/10" xmlns:command="http://schemas.microsoft.com/maml/dev/command/2004/10" xmlns:dev="http://schemas.microsoft.com/maml/dev/2004/10" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
    <command:details>
      <command:name>Uninstall-SoftwareProduct</command:name>
      <command:verb>Uninstall</command:verb>
      <command:noun>SoftwareProduct</command:noun>
      <maml:description>
        <maml:para>Uninstalls specified software products.</maml:para>
      </maml:description>
    </command:details>
    <maml:description>
      <maml:para>The Uninstall-SoftwareProduct cmdlet uninstalls software products specified by the 'DisplayName' or the 'InputObject' parameter. The cmdlet attempts an unattended uninstall of the software product based on the 'QuietUninstallString' or 'UninstallString' registry value for the specified software product. Many software vendors do not publish accurate uninstall string information, therefore the uninstall process may fail, result with the uninstaller presenting a user interface, and/or require user input. You can specify additional arguments to pass to the uninstaller by using the 'ArgumentList' parameter. These arguments will be concatenated with software product's uninstall string.</maml:para>
      <maml:para>In case of Windows Installer based software products, the cmdlet will automatically alter the uninstall string to perform a silent uninstall and log the uninstallation process to a file.</maml:para>
    </maml:description>
    <command:syntax>
      <command:syntaxItem>
        <maml:name>Uninstall-SoftwareProduct</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
          <maml:name>DisplayName</maml:name>
          <maml:description>
            <maml:para>Specifies the display name of the software product(s) to retrieve. The value of 'DisplayName' is used exactly as it's typed. No characters are interpreted as wildcards. If the display name includes escape characters, enclose it in single quotation marks. Single quotation marks tell PowerShell not to interpret any characters as escape sequences.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
          <dev:type>
            <maml:name>String</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
          <maml:name>ArgumentList</maml:name>
          <maml:description>
            <maml:para>Specifies the list of arguments to pass to the uninstaller. The cmdlet concatenates these arguments with the software product's uninstall string.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">System.Collections.Generic.List`1[System.String]</command:parameterValue>
          <dev:type>
            <maml:name>System.Collections.Generic.List`1[System.String]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
      <command:syntaxItem>
        <maml:name>Uninstall-SoftwareProduct</maml:name>
        <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
          <maml:name>InputObject</maml:name>
          <maml:description>
            <maml:para>Specifies one or more 'SoftwareProduct' objects. Enter a variable that contains the objects, type a command or expression that gets the objects, or send the objects down the pipeline to this cmdlet.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">System.Collections.Generic.HashSet`1[LISSTech.SoftwareManager.Library.SoftwareProduct]</command:parameterValue>
          <dev:type>
            <maml:name>System.Collections.Generic.HashSet`1[LISSTech.SoftwareManager.Library.SoftwareProduct]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
          <maml:name>ArgumentList</maml:name>
          <maml:description>
            <maml:para>Specifies the list of arguments to pass to the uninstaller. The cmdlet concatenates these arguments with the software product's uninstall string.</maml:para>
          </maml:description>
          <command:parameterValue required="true" variableLength="false">System.Collections.Generic.List`1[System.String]</command:parameterValue>
          <dev:type>
            <maml:name>System.Collections.Generic.List`1[System.String]</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>None</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
          <maml:name>Confirm</maml:name>
          <maml:description>
            <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
        <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
          <maml:name>WhatIf</maml:name>
          <maml:description>
            <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
          </maml:description>
          <dev:type>
            <maml:name>SwitchParameter</maml:name>
            <maml:uri />
          </dev:type>
          <dev:defaultValue>False</dev:defaultValue>
        </command:parameter>
      </command:syntaxItem>
    </command:syntax>
    <command:parameters>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName)" position="1" aliases="none">
        <maml:name>ArgumentList</maml:name>
        <maml:description>
          <maml:para>Specifies the list of arguments to pass to the uninstaller. The cmdlet concatenates these arguments with the software product's uninstall string.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">System.Collections.Generic.List`1[System.String]</command:parameterValue>
        <dev:type>
          <maml:name>System.Collections.Generic.List`1[System.String]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="cf">
        <maml:name>Confirm</maml:name>
        <maml:description>
          <maml:para>Prompts you for confirmation before running the cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
        <maml:name>DisplayName</maml:name>
        <maml:description>
          <maml:para>Specifies the display name of the software product(s) to retrieve. The value of 'DisplayName' is used exactly as it's typed. No characters are interpreted as wildcards. If the display name includes escape characters, enclose it in single quotation marks. Single quotation marks tell PowerShell not to interpret any characters as escape sequences.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">String</command:parameterValue>
        <dev:type>
          <maml:name>String</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="true" variableLength="true" globbing="false" pipelineInput="True (ByPropertyName, ByValue)" position="0" aliases="none">
        <maml:name>InputObject</maml:name>
        <maml:description>
          <maml:para>Specifies one or more 'SoftwareProduct' objects. Enter a variable that contains the objects, type a command or expression that gets the objects, or send the objects down the pipeline to this cmdlet.</maml:para>
        </maml:description>
        <command:parameterValue required="true" variableLength="false">System.Collections.Generic.HashSet`1[LISSTech.SoftwareManager.Library.SoftwareProduct]</command:parameterValue>
        <dev:type>
          <maml:name>System.Collections.Generic.HashSet`1[LISSTech.SoftwareManager.Library.SoftwareProduct]</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>None</dev:defaultValue>
      </command:parameter>
      <command:parameter required="false" variableLength="true" globbing="false" pipelineInput="False" position="named" aliases="wi">
        <maml:name>WhatIf</maml:name>
        <maml:description>
          <maml:para>Shows what would happen if the cmdlet runs. The cmdlet is not run.</maml:para>
        </maml:description>
        <command:parameterValue required="false" variableLength="false">SwitchParameter</command:parameterValue>
        <dev:type>
          <maml:name>SwitchParameter</maml:name>
          <maml:uri />
        </dev:type>
        <dev:defaultValue>False</dev:defaultValue>
      </command:parameter>
    </command:parameters>
    <command:inputTypes>
      <command:inputType>
        <dev:type>
          <maml:name>System.String</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.Collections.Generic.HashSet`1[[LISSTech.SoftwareManager.SoftwareProduct, LISSTech.SoftwareManager, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
      <command:inputType>
        <dev:type>
          <maml:name>System.Collections.Generic.List`1[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:inputType>
    </command:inputTypes>
    <command:returnValues>
      <command:returnValue>
        <dev:type>
          <maml:name>System.Void</maml:name>
        </dev:type>
        <maml:description>
          <maml:para></maml:para>
        </maml:description>
      </command:returnValue>
    </command:returnValues>
    <maml:alertSet>
      <maml:alert>
        <maml:para></maml:para>
      </maml:alert>
    </maml:alertSet>
    <command:examples>
      <command:example>
        <maml:title>-------------------------- Example 1 --------------------------</maml:title>
        <dev:code>PS C:\&gt; Uninstall-SoftwareProduct -DisplayName "Google Chrome"</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 2 --------------------------</maml:title>
        <dev:code>PS C:\&gt; Uninstall-SoftwareProduct -InputObject (Get-SoftwareProduct -DisplayName "Google Chrome")</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
      <command:example>
        <maml:title>-------------------------- Example 3 --------------------------</maml:title>
        <dev:code>PS C:\&gt; Get-SoftwareProduct "Google Chrome" | Uninstall-SoftwareProduct -Confirm -Verbose
 
VERBOSE: Begin Uninstall-SoftwareProduct
 
Confirm
Are you sure you want to perform this action?
Performing the operation "Uninstall software product" on target "Google Chrome".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
VERBOSE: Uninstalling software product Google Chrome (v128.0.6613.86)
VERBOSE: Uninstall command file path: C:\Windows\system32\msiexec.exe
VERBOSE: Uninstall command argument list: /X{7F08E893-C58B-3AB0-90AB-40345FA04B72} /qn /norestart /l\*v C:\Windows\TEMP\GoogleChrome-Uninstall.log
VERBOSE: Uninstall command started with PID: 12652
WARNING: Uninstall command completed with a non-zero exit code: 1603
VERBOSE: End Uninstall-SoftwareProduct</dev:code>
        <dev:remarks>
          <maml:para></maml:para>
        </dev:remarks>
      </command:example>
    </command:examples>
    <command:relatedLinks />
  </command:command>
</helpItems>