Praca z instalacjami oprogramowania

Dostęp do aplikacji przeznaczonych do korzystania z Instalatora Windows można uzyskać za pośrednictwem klasy Win32_Product usługi WMI, ale nie wszystkie aplikacje używane obecnie korzystają z Instalatora Windows. Aplikacje korzystające z procedur konfiguracji alternatywnej nie są zwykle zarządzane przez Instalatora Windows. Konkretne techniki pracy z tymi aplikacjami zależą od oprogramowania instalatora i decyzji podjętych przez dewelopera aplikacji. Na przykład aplikacje instalowane przez skopiowanie plików do folderu na komputerze zwykle nie mogą być zarządzane przy użyciu technik omówionych tutaj. Te aplikacje można zarządzać jako plikami i folderami przy użyciu technik omówionych w temacie Praca z plikami i folderami.

Przestroga

Klasa Win32_Product nie jest zoptymalizowana pod kątem zapytań. Zapytania korzystające z filtrów wieloznacznych powodują, że usługa WMI używa dostawcy msi do wyliczania wszystkich zainstalowanych produktów, a następnie analizuje pełną listę sekwencyjnie w celu obsługi filtru. Powoduje to również zainicjowanie sprawdzania spójności zainstalowanych pakietów, weryfikowania i naprawiania instalacji. Walidacja jest powolnym procesem i może spowodować błędy w dziennikach zdarzeń. Aby uzyskać więcej informacji, poszukaj 974524 artykułu z bazy wiedzy.

Wyświetlanie listy aplikacji Instalatora Windows

Aby wyświetlić listę aplikacji zainstalowanych z Instalatorem Windows w systemie lokalnym lub zdalnym, użyj następującego prostego zapytania usługi WMI:

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 do wyświetlenia, użyj parametru Właściwości poleceń cmdlet formatowania, takich jak Format-List polecenie cmdlet, z wartością * (wszystkie).

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

Możesz też użyć parametru Get-CimInstanceFilter , aby wybrać tylko środowisko uruchomieniowe microsoft .NET 2.0. Wartość parametru Filter używa składni języka WMI Query Language (WQL), a nie składni Windows PowerShell. Na przykład:

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

Aby wyświetlić listę tylko odpowiednich właściwości, użyj parametru Property poleceń cmdlet formatowania, aby wyświetlić żądane właściwości.

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 aplikacji możliwych do odinstalowania

Ponieważ większość standardowych aplikacji rejestruje program odinstalowywania w systemie Windows, możemy pracować z nimi lokalnie, wyszukując je w rejestrze systemu Windows. Nie ma gwarantowanego sposobu znajdowania każdej aplikacji w systemie. Istnieje jednak możliwość znalezienia wszystkich programów z listami wyświetlanymi w obszarze Dodaj lub Usuń programy w następującym kluczu rejestru:

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

Możemy zbadać ten klucz, aby znaleźć aplikacje. Aby ułatwić wyświetlanie klucza Odinstaluj, możemy zamapować dysk programu PowerShell na tę lokalizację rejestru:

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:", który może służyć do szybkiego i wygodnego wyszukiwania instalacji aplikacji. Liczbę zainstalowanych aplikacji można znaleźć, zliczając liczbę kluczy rejestru na dysku Uninstall: PowerShell:

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

Tę listę aplikacji można dalej przeszukiwać, korzystając z różnych technik, począwszy od Get-ChildItem. Aby uzyskać listę aplikacji i zapisać je w zmiennej $UninstallableApplications , użyj następującego polecenia:

$UninstallableApplications = Get-ChildItem -Path Uninstall:

Aby wyświetlić wartości wpisów rejestru w kluczu rejestru w obszarze Odinstaluj, użyj metody GetValue kluczy rejestru. Wartość metody jest nazwą wpisu rejestru.

Aby na przykład znaleźć nazwy wyświetlane aplikacji w kluczu Odinstaluj, użyj następującego polecenia:

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

Uwaga

Nie ma gwarancji, że wartości DisplayName są unikatowe.

Instalowanie aplikacji

Możesz użyć klasy Win32_Product , aby zainstalować pakiety Instalatora Windows, zdalnie lub lokalnie.

Uwaga

Aby zainstalować aplikację, należy uruchomić program PowerShell z opcją "Uruchom jako administrator".

Podczas instalacji zdalnej należy użyć ścieżki sieciowej Universal Naming Convention (UNC), aby określić ścieżkę do pakietu .msi, ponieważ podsystem WMI nie rozumie ścieżek programu PowerShell. Aby na przykład 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:

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

Aplikacje, które nie korzystają z technologii Instalatora Windows, mogą mieć metody specyficzne dla aplikacji do automatycznego wdrażania. Zapoznaj się z dokumentacją aplikacji lub zapoznaj się z systemem pomocy technicznej dostawcy aplikacji.

Usuwanie aplikacji

Usunięcie pakietu Instalatora Windows przy użyciu programu PowerShell działa w mniej więcej taki sam sposób jak instalowanie pakietu. Oto przykład, który wybiera pakiet do odinstalowania na podstawie jego nazwy; w niektórych przypadkach filtrowanie za pomocą elementu IdentifyingNumber może być łatwiejsze:

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

Usuwanie innych aplikacji nie jest tak proste, nawet w przypadku wykonywania lokalnego. Ciągi dezinstalacji wiersza polecenia dla tych aplikacji można znaleźć, wyodrębniając właściwość UninstallString . Ta metoda działa w przypadku aplikacji Instalatora Windows i starszych programów wyświetlanych w kluczu Odinstaluj:

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

Dane wyjściowe można filtrować według nazwy wyświetlanej, jeśli chcesz:

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żywane w wierszu polecenia programu PowerShell bez pewnych modyfikacji.

Uaktualnianie aplikacji Instalatora Windows

Aby uaktualnić aplikację, musisz znać nazwę aplikacji i ścieżkę do pakietu uaktualnienia aplikacji. Dzięki tym informacjom można uaktualnić aplikację za pomocą jednego polecenia programu PowerShell:

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