Praca z instalacjami oprogramowaniaWorking with Software Installations

Do aplikacji, które są przeznaczone do korzystania z Instalator Windows, można uzyskać dostęp za pomocą klasy WIN32_PRODUCT WMI, ale nie wszystkie używane obecnie aplikacje używają Instalator Windows.Applications that are designed to use Windows Installer can be accessed through WMI's Win32_Product class, but not all applications in use today use the Windows Installer. Aplikacje korzystające z alternatywnych procedur konfiguracji nie są zwykle zarządzane przez Instalator Windows.Applications that use alternate setup routines are not usually managed by the Windows Installer. Konkretne techniki pracy z tymi aplikacjami są zależne od oprogramowania Instalatora i decyzji podejmowanych przez dewelopera aplikacji.Specific techniques for working with those applications depends on the installer software and decisions made by the application developer. Na przykład aplikacje zainstalowane przez kopiowanie plików do folderu na komputerze zwykle nie mogą być zarządzane przy użyciu technik omówionych tutaj.For example, applications installed by copying the files to a folder on the computer usually cannot be managed by using techniques discussed here. Tymi aplikacjami można zarządzać jako plikami i folderami przy użyciu technik omówionych w temacie Praca z plikami i folderami.You can manage these applications as files and folders by using the techniques discussed in Working With Files and Folders.

Przestroga

Klasa Win32_Product nie jest zoptymalizowana pod kątem zapytania.The Win32_Product class is not query optimized. Zapytania, które używają filtrów symboli wieloznacznych, powodują, że usługa WMI używa dostawcy MSI do wyliczania wszystkich zainstalowanych produktów, a następnie analizuje pełną listę sekwencyjnie, aby obsłużyć filtr.Queries that use wildcard filters cause WMI to use the MSI provider to enumerate all installed products then parse the full list sequentially to handle the filter. Spowoduje to również zainicjowanie sprawdzania spójności zainstalowanych pakietów, zweryfikowanie i naprawianie instalacji.This also initiates a consistency check of packages installed, verifying and repairing the install. Sprawdzanie poprawności jest procesem powolnym i może powodować błędy w dziennikach zdarzeń.The validation is a slow process and may result in errors in the event logs. Więcej informacji znajduje się w artykule KB 974524.For more information seek KB article 974524.

Wyświetlanie listy aplikacji Instalator WindowsListing Windows Installer Applications

Aby wyświetlić listę aplikacji zainstalowanych z Instalator Windows w systemie lokalnym lub zdalnym, użyj następującej prostej kwerendy usługi WMI:To list the applications installed with the Windows Installer on a local or remote system, use the following simple WMI query:

Get-CimInstance -Class Win32_Product |
  Where-Object Name -eq "Microsoft .NET Core Runtime - 2.1.5 (x64)"
Name             Caption                   Vendor                    Version       IdentifyingNumber
----             -------                   ------                    -------       -----------------
Microsoft .NET … Microsoft .NET Core Runt… Microsoft Corporation     16.84.26919   {BEB59D04-C6DD-4926-AFE…

Aby wyświetlić wszystkie właściwości obiektu Win32_Product na ekranie, użyj parametru Właściwości poleceń cmdlet formatowania, takich jak Format-List polecenie cmdlet, z wartością * (wszystkie).To display all the properties of the Win32_Product object to the display, use the Properties parameter of the formatting cmdlets, such as the Format-List cmdlet, with a value of * (all).

Get-CimInstance -Class Win32_Product |
  Where-Object Name -eq "Microsoft .NET Core Runtime - 2.1.5 (x64)" |
    Format-List -Property *
Name                  : Microsoft .NET Core Runtime - 2.1.5 (x64)
Version               : 16.84.26919
InstallState          : 5
Caption               : Microsoft .NET Core Runtime - 2.1.5 (x64)
Description           : Microsoft .NET Core Runtime - 2.1.5 (x64)
IdentifyingNumber     : {BEB59D04-C6DD-4926-AFEB-410CBE2EBCE4}
SKUNumber             :
Vendor                : Microsoft Corporation
AssignmentType        : 1
HelpLink              :
HelpTelephone         :
InstallDate           : 20181105
InstallDate2          :
InstallLocation       :
InstallSource         : C:\ProgramData\Package Cache\{BEB59D04-C6DD-4926-AFEB-410CBE2EBCE4}v16.84.26919\
Language              : 1033
LocalPackage          : C:\WINDOWS\Installer\4f97a771.msi
PackageCache          : C:\WINDOWS\Installer\4f97a771.msi
PackageCode           : {9A271A10-039D-49EA-8D24-043D91B9F915}
PackageName           : dotnet-runtime-2.1.5-win-x64.msi
ProductID             :
RegCompany            :
RegOwner              :
Transforms            :
URLInfoAbout          :
URLUpdateInfo         :
WordCount             : 0
PSComputerName        :
CimClass              : root/cimv2:Win32_Product
CimInstanceProperties : {Caption, Description, IdentifyingNumber, Name...}
CimSystemProperties   : Microsoft.Management.Infrastructure.CimSystemProperties

Lub można użyć Get-CimInstance parametru filtru , aby wybrać tylko Microsoft .NET środowiska uruchomieniowego 2,0.Or, you could use the Get-CimInstance Filter parameter to select only Microsoft .NET 2.0 Runtime. Wartość parametru filtru używa składni język zapytań usługi WMI (WQL), a nie składni programu Windows PowerShell.The value of the Filter parameter uses WMI Query Language (WQL) syntax, not Windows PowerShell syntax. Przykład:For example:

Get-CimInstance -Class Win32_Product -Filter "Name='Microsoft .NET Core Runtime - 2.1.5 (x64)'" |
  Format-List -Property *

Aby wyświetlić listę tylko interesujących właściwości, użyj parametru Właściwości poleceń cmdlet formatowania, aby wyświetlić listę żądanych właściwości.To list only the properties that interest you, use the Property parameter of the formatting cmdlets to list the desired properties.

Get-CimInstance -Class Win32_Product  -Filter "Name='Microsoft .NET Core Runtime - 2.1.5 (x64)'" |
  Format-List -Property Name,InstallDate,InstallLocation,PackageCache,Vendor,Version,IdentifyingNumber
Name              : Microsoft .NET Core Runtime - 2.1.5 (x64)
InstallDate       : 20180816
InstallLocation   :
PackageCache      : C:\WINDOWS\Installer\4f97a771.msi
Vendor            : Microsoft Corporation
Version           : 16.72.26629
IdentifyingNumber : {ACC73072-9AD5-416C-94BF-D82DDCEA0F1B}

Wyświetlanie listy wszystkich nieinstalowanych aplikacjiListing All Uninstallable Applications

Ze względu na to, że większość standardowych aplikacji rejestruje dezinstalatora w systemie Windows, firma Microsoft może współpracować z nimi lokalnie, wyszukując je w rejestrze systemu Windows.Because most standard applications register an uninstaller with Windows, we can work with those locally by finding them in the Windows registry. Nie ma żadnego gwarantowanego sposobu znajdowania każdej aplikacji w systemie.There is no guaranteed way to find every application on a system. Można jednak znaleźć wszystkie programy z listami wyświetlanymi w aplecie Dodaj lub usuń programy w następującym kluczu rejestru:However, it is possible to find all programs with listings displayed in Add or Remove Programs in the following registry key:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall.HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall.

Możemy przeanalizować ten klucz, aby znaleźć aplikacje.We can examine this key to find applications. Aby ułatwić wyświetlanie klucza odinstalowywania, można zmapować dysk programu PowerShell do tej lokalizacji w rejestrze:To make it easier to view the Uninstall key, we can map a PowerShell drive to this registry location:

New-PSDrive -Name Uninstall -PSProvider Registry -Root HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Name       Provider      Root                                   CurrentLocation
----       --------      ----                                   ---------------
Uninstall  Registry      HKEY_LOCAL_MACHINE\SOFTWARE\Micr...

Mamy teraz dysk o nazwie "Uninstall:", za pomocą którego można szybko i wygodnie szukać instalacji aplikacji.We now have a drive named "Uninstall:" that can be used to quickly and conveniently look for application installations. Liczbę zainstalowanych aplikacji można znaleźć przez obliczenie liczby kluczy rejestru w odinstalowaniu: dysk programu PowerShell:We can find the number of installed applications by counting the number of registry keys in the Uninstall: PowerShell drive:

(Get-ChildItem -Path Uninstall:).Count
459

Teraz można przeszukiwać tę listę aplikacji, korzystając z Get-ChildItemróżnych technik, zaczynając od.We can search this list of applications further by using a variety of techniques, beginning with Get-ChildItem. Aby uzyskać listę aplikacji i zapisać je w $UninstallableApplications zmiennej, użyj następującego polecenia:To get a list of applications and save them in the $UninstallableApplications variable, use the following command:

$UninstallableApplications = Get-ChildItem -Path Uninstall:

Aby wyświetlić wartości wpisów rejestru w kluczach rejestru w obszarze Odinstalowywanie, użyj metody GetValue kluczy rejestru.To display the values of the registry entries in the registry keys under Uninstall, use the GetValue method of the registry keys. Wartość metody jest nazwą wpisu rejestru.The value of the method is the name of the registry entry.

Aby na przykład znaleźć nazwy wyświetlane aplikacji w kluczu dezinstalacji, użyj następującego polecenia:For example, to find the display names of applications in the Uninstall key, use the following command:

$UninstallableApplications | ForEach-Object -Process { $_.GetValue('DisplayName') }

Nie ma gwarancji, że te wartości są unikatowe.There is no guarantee that these values are unique. W poniższym przykładzie dwa zainstalowane elementy są wyświetlane jako "Windows Media Encoder 9 Series":In the following example, two installed items appear as "Windows Media Encoder 9 Series":

$UninstallableApplications | Where-Object -FilterScript {
  $_.GetValue("DisplayName") -eq "Microsoft Silverlight"
}
    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Name                           Property
----                           --------
{89F4137D-6C26-4A84-BDB8-2E5A4 AuthorizedCDFPrefix :
BB71E00}                       Comments            :
                               Contact             :
                               DisplayVersion      : 5.1.50918.0
                               HelpLink            : https://go.microsoft.com/fwlink/?LinkID=91955
                               HelpTelephone       :
                               InstallDate         : 20190115
                               InstallLocation     : C:\Program Files\Microsoft Silverlight\
                               InstallSource       : c:\ef64c54526db9c34cd477c103e68a254\
                               ModifyPath          : MsiExec.exe /X{89F4137D-6C26-4A84-BDB8-2E5A4BB71E00}
                               NoModify            : 1
                               NoRepair            : 1
                               Publisher           : Microsoft Corporation
                               Readme              :
                               Size                :
                               EstimatedSize       : 236432
                               UninstallString     : MsiExec.exe /X{89F4137D-6C26-4A84-BDB8-2E5A4BB71E00}
                               URLInfoAbout        :
                               URLUpdateInfo       :
                               VersionMajor        : 5
                               VersionMinor        : 1
                               WindowsInstaller    : 1
                               Version             : 84002534
                               Language            : 1033
                               DisplayName         : Microsoft Silverlight
                               sEstimatedSize2     : 79214

Instalowanie aplikacjiInstalling Applications

Za pomocą klasy Win32_Product można instalować Instalator Windows pakiety zdalnie lub lokalnie.You can use the Win32_Product class to install Windows Installer packages, remotely or locally.

Uwaga

Aby zainstalować aplikację, należy uruchomić program PowerShell z opcją "Uruchom jako administrator".To install an application, you must start PowerShell with the "Run as administrator" option.

Podczas instalacji zdalnej użyj ścieżki sieciowej Universal Naming Convention (UNC), aby określić ścieżkę do pakietu msi, ponieważ podsystem usługi WMI nie rozpoznaje ścieżek programu PowerShell.When installing remotely, use a Universal Naming Convention (UNC) network path to specify the path to the .msi package, because the WMI subsystem does not understand PowerShell paths. Na przykład aby zainstalować pakiet NewPackage. msi znajdujący się w udziale \\AppServ\dsp sieciowym na komputerze zdalnym PC01, wpisz następujące polecenie w wierszu polecenia programu PowerShell:For example, to install the NewPackage.msi package located in the network share \\AppServ\dsp on the remote computer PC01, type the following command at the PowerShell prompt:

Invoke-CimMethod -ClassName Win32_Product -MethodName Install -Arguments @{PackageLocation='\\AppSrv\dsp\NewPackage.msi'}

Aplikacje, które nie korzystają z technologii Instalator Windows, mogą mieć metody dotyczące automatycznego wdrażania, które są specyficzne dla aplikacji.Applications that do not use Windows Installer technology may have application-specific methods for automated deployment. Zapoznaj się z dokumentacją aplikacji lub zapoznaj się z systemem pomocy technicznej dostawcy aplikacji.Check the documentation for the application or consult the application vendor's support system.

Usuwanie aplikacjiRemoving Applications

Usuwanie pakietu Instalator Windows przy użyciu programu PowerShell działa w taki sam sposób jak w przypadku instalowania pakietu.Removing a Windows Installer package using PowerShell works in approximately the same way as installing a package. Oto przykład, który wybiera pakiet do odinstalowania na podstawie jego nazwy; w niektórych przypadkach może być łatwiejsze Filtrowanie za pomocą identyfikacyjnemu:Here is an example that selects the package to uninstall based on its name; in some cases it may be easier to filter with the IdentifyingNumber:

Get-CimInstance -Class Win32_Product -Filter "Name='ILMerge'" | Invoke-CimMethod -MethodName Uninstall

Usuwanie innych aplikacji nie jest bardzo proste, nawet gdy jest wykonywane lokalnie.Removing other applications is not quite so simple, even when done locally. W przypadku tych aplikacji możemy znaleźć ciągi dezinstalacji wiersza polecenia, wyodrębniając Właściwość UninstallString .We can find the command line uninstallation strings for these applications by extracting the UninstallString property. Ta metoda działa w przypadku aplikacji Instalator Windows i dla starszych programów pojawiających się w ramach klucza dezinstalacji:This method works for Windows Installer applications and for older programs appearing under the Uninstall key:

Get-ChildItem -Path Uninstall: | ForEach-Object -Process { $_.GetValue('UninstallString') }

Możesz filtrować dane wyjściowe według nazwy wyświetlanej, jeśli chcesz:You can filter the output by the display name, if you like:

Get-ChildItem -Path Uninstall: |
    Where-Object -FilterScript { $_.GetValue('DisplayName') -like 'Win*'} |
        ForEach-Object -Process { $_.GetValue('UninstallString') }

Jednak te ciągi mogą nie być bezpośrednio użyteczne w wierszu polecenia programu PowerShell bez modyfikacji.However, these strings may not be directly usable from the PowerShell prompt without some modification.

Uaktualnianie aplikacji Instalator WindowsUpgrading Windows Installer Applications

Aby uaktualnić aplikację, należy znać nazwę aplikacji i ścieżkę do pakietu uaktualnienia aplikacji.To upgrade an application, you need to know the name of the application and the path to the application upgrade package. Korzystając z tych informacji, można uaktualnić aplikację za pomocą jednego polecenia programu PowerShell:With that information, you can upgrade an application with a single PowerShell command:

Get-CimInstance -Class Win32_Product -Filter "Name='OldAppName'" |
  Invoke-CimMethod -MethodName Upgrade -Arguments @{PackageLocation='\\AppSrv\dsp\OldAppUpgrade.msi'}