Bekerja dengan Penginstalan Perangkat Lunak

Aplikasi yang dirancang untuk menggunakan Pemasang Windows dapat diakses melalui kelas Win32_Product WMI, tetapi tidak semua aplikasi yang digunakan saat ini menggunakan Pemasang Windows. Aplikasi yang menggunakan rutinitas penyiapan alternatif biasanya tidak dikelola oleh Pemasang Windows. Teknik khusus untuk bekerja dengan aplikasi tersebut tergantung pada perangkat lunak penginstal dan keputusan yang dibuat oleh pengembang aplikasi. Misalnya, aplikasi yang diinstal dengan menyalin file ke folder di komputer biasanya tidak dapat dikelola dengan menggunakan teknik yang dibahas di sini. Anda dapat mengelola aplikasi ini sebagai file dan folder dengan menggunakan teknik yang dibahas dalam Bekerja Dengan File dan Folder.

Perhatian

Kelas Win32_Product tidak dioptimalkan untuk kueri. Kueri yang menggunakan filter kartubebas menyebabkan WMI menggunakan penyedia MSI untuk menghitung semua produk yang diinstal kemudian mengurai daftar lengkap secara berurutan untuk menangani filter. Ini juga memulai pemeriksaan konsistensi paket yang diinstal, memverifikasi, dan memperbaiki penginstalan. Validasi adalah proses yang lambat dan dapat mengakibatkan kesalahan dalam log peristiwa. Untuk informasi selengkapnya, cari 974524 artikel KB.

Mencantumkan Aplikasi Penginstal Windows

Untuk mencantumkan aplikasi yang diinstal dengan Pemasang Windows pada sistem lokal atau jarak jauh, gunakan kueri WMI sederhana berikut:

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…

Untuk menampilkan semua properti objek Win32_Product ke tampilan, gunakan parameter Properti cmdlet pemformatan, seperti Format-List cmdlet , dengan nilai * (semua).

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

Atau, Anda dapat menggunakan Get-CimInstance parameter Filter untuk memilih hanya Microsoft .NET 2.0 Runtime. Nilai parameter Filter menggunakan sintaks WMI Query Language (WQL), bukan sintaks Windows PowerShell. Contohnya:

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

Untuk mencantumkan hanya properti yang menarik minat Anda, gunakan parameter Properti dari cmdlet pemformatan untuk mencantumkan properti yang diinginkan.

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}

Mencantumkan Semua Aplikasi yang Dapat Dibongaran

Karena sebagian besar aplikasi standar mendaftarkan uninstaller dengan Windows, kita dapat bekerja dengan mereka secara lokal dengan menemukannya di registri Windows. Tidak ada cara yang dijamin untuk menemukan setiap aplikasi pada sistem. Namun, dimungkinkan untuk menemukan semua program dengan daftar yang ditampilkan di Tambahkan atau Hapus Program di kunci registri berikut:

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

Kita dapat memeriksa kunci ini untuk menemukan aplikasi. Untuk mempermudah melihat kunci Hapus instalan, kita dapat memetakan drive PowerShell ke lokasi registri ini:

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

Kami sekarang memiliki drive bernama "Uninstall:" yang dapat digunakan untuk mencari penginstalan aplikasi dengan cepat dan mudah. Kita dapat menemukan jumlah aplikasi yang diinstal dengan menghitung jumlah kunci registri di Uninstall: Drive PowerShell:

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

Kita dapat mencari daftar aplikasi ini lebih lanjut dengan menggunakan berbagai teknik, dimulai dengan Get-ChildItem. Untuk mendapatkan daftar aplikasi dan menyimpannya dalam $UninstallableApplications variabel, gunakan perintah berikut:

$UninstallableApplications = Get-ChildItem -Path Uninstall:

Untuk menampilkan nilai entri registri dalam kunci registri di bawah Hapus instalan, gunakan metode GetValue dari kunci registri. Nilai metode adalah nama entri registri.

Misalnya, untuk menemukan nama tampilan aplikasi di kunci Hapus instalan, gunakan perintah berikut:

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

Catatan

Tidak ada jaminan bahwa nilai DisplayName unik.

Menginstal Aplikasi

Anda dapat menggunakan kelas Win32_Product untuk menginstal paket Pemasang Windows, dari jarak jauh atau lokal.

Catatan

Untuk menginstal aplikasi, Anda harus memulai PowerShell dengan opsi "Jalankan sebagai administrator".

Saat menginstal dari jarak jauh, gunakan jalur jaringan Universal Naming Convention (UNC) untuk menentukan jalur ke paket .msi, karena subsistem WMI tidak memahami jalur PowerShell. Misalnya, untuk menginstal paket NewPackage.msi yang terletak di berbagi \\AppServ\dsp jaringan di komputer jarak jauh PC01, ketik perintah berikut ini di prompt PowerShell:

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

Aplikasi yang tidak menggunakan teknologi Pemasang Windows mungkin memiliki metode khusus aplikasi untuk penyebaran otomatis. Periksa dokumentasi untuk aplikasi atau konsultasikan dengan sistem dukungan vendor aplikasi.

Menghapus Aplikasi

Menghapus paket Pemasang Windows menggunakan PowerShell berfungsi dengan cara yang kira-kira sama seperti menginstal paket. Berikut adalah contoh yang memilih paket untuk dilepas berdasarkan namanya; dalam beberapa kasus mungkin lebih mudah untuk memfilter dengan IdentifiingNumber:

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

Menghapus aplikasi lain tidak begitu sederhana, bahkan ketika dilakukan secara lokal. Kita dapat menemukan string penghapusan instalan baris perintah untuk aplikasi ini dengan mengekstrak properti UninstallString . Metode ini berfungsi untuk aplikasi Pemasang Windows dan untuk program lama yang muncul di bawah kunci Hapus instalan:

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

Anda dapat memfilter output dengan nama tampilan, jika Anda suka:

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

Namun, string ini mungkin tidak dapat langsung digunakan dari prompt PowerShell tanpa beberapa modifikasi.

Memutakhirkan Aplikasi Penginstal Windows

Untuk meningkatkan aplikasi, Anda perlu mengetahui nama aplikasi dan jalur ke paket peningkatan aplikasi. Dengan informasi tersebut, Anda dapat meningkatkan aplikasi dengan satu perintah PowerShell:

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