Yazılım Yüklemeleri ile Çalışma

Windows Installer'Windows tasarlanan uygulamalara WMI'nin Win32_Product sınıfı üzerinden erişilebilir, ancak bugün kullanımda olan tüm uygulamalar Windows Yükleyicisi'Windows kullanmaz. Alternatif kurulum yordamları kullanan uygulamalar genellikle Windows Yükleyicisi tarafından yönetilmiyor. Bu uygulamalarla çalışmaya yönelik belirli teknikler, yükleyici yazılımına ve uygulama geliştiricisi tarafından alınan kararlara bağlıdır. Örneğin, dosyaları bilgisayar üzerinde bir klasöre kopyalayıp yüklenmiş uygulamalar genellikle burada ele alınan teknikler kullanılarak yönetilamaz. Dosya ve Klasörlerle Çalışma konusunda ele alınmıştır tekniklerini kullanarak bu uygulamaları dosya ve klasör olarak yönetebilirsiniz.

Dikkat

Win32_Product sınıfı sorgu için iyileştirilmiş değildir. Joker karakter filtreleri kullanan sorgular, WMI'nın tüm yüklü ürünleri numaralandırarak MSI sağlayıcısını kullanmasına ve ardından tam listeyi filtreyi işlemek için sırayla ayrıştırmasına neden olur. Bu işlem ayrıca yüklü paketlerin tutarlılık denetimini başlatarak yüklemenin doğrulandırıldığını ve onarıldığını doğrular. Doğrulama yavaş bir işlemdir ve olay günlüklerinde hatalara neden olabilir. Daha fazla bilgi için, 974524.

Yükleyici Windows Listeleme

Yerel veya uzak bir sistemde Windows Yükleyicisi ile yüklü uygulamaları listeleyebilirsiniz, aşağıdaki basit WMI sorgusunu kullanın:

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…

Win32_Product nesnesinin tüm özelliklerini görüntülemek için biçimlendirme cmdlet'lerinin Properties parametresini Format-List (cmdlet gibi) * değeriyle (all) kullanın.

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

Veya Yalnızca Get-CimInstance 2.0 Çalışma Zamanı'Microsoft .NET filtre parametresini kullanabilirsiniz. Filter parametresinin değeri, WMI Sorgu Dili (WQL) söz dizimi Windows PowerShell kullanır. Örnek:

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

Yalnızca ilginiz olan özellikleri listeleyebilirsiniz. Biçimlendirme cmdlet'lerinin Property parametresini kullanarak istenen özellikleri listeleebilirsiniz.

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}

Kaldırılabilir Tüm Uygulamaları Listeleme

Çoğu standart uygulama bir kaldırıcıyı Windows kayıt defterinde bularak bu uygulamalarla yerel olarak Windows. Sistemde her uygulamayı bulmanın garanti edilemez bir yolu vardır. Ancak, aşağıdaki kayıt defteri anahtarında Program Ekle veya Kaldır'da listelerle birlikte görüntülenen tüm programları bulmak mümkündür:

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

Uygulamaları bulmak için bu anahtarı inceleriz. Kaldır anahtarını görüntülemeyi kolaylaştırmak için bir PowerShell sürücüsü ile bu kayıt defteri konumunu eşleyebilirsiniz:

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

Artık uygulama yüklemelerini hızlı ve kolay bir şekilde bakmak için kullanılan "Kaldır:" adlı bir sürücüye sahipsiniz. Kaldır: PowerShell sürücüsünde kayıt defteri anahtarlarının sayısını sayarak yüklü uygulama sayısını bulamıyorum:

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

ile başlayan çeşitli teknikleri kullanarak bu uygulama listesinde daha fazla arama da Get-ChildItem ekleyebilirsiniz. Uygulamaların listesini almak ve bunları değişkene $UninstallableApplications kaydetmek için aşağıdaki komutu kullanın:

$UninstallableApplications = Get-ChildItem -Path Uninstall:

Kaldır altındaki kayıt defteri anahtarlarında kayıt defteri girişlerinin değerlerini görüntülemek için kayıt defteri anahtarlarının GetValue yöntemini kullanın. yönteminin değeri kayıt defteri girişinin adıdır.

Örneğin, Kaldırma anahtarında uygulamaların görünen adlarını bulmak için aşağıdaki komutu kullanın:

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

Not

DisplayName değerlerinin benzersiz olduğu garanti edilemez.

Uygulamaları Yükleme

Win32_Product yükleyici paketlerini uzaktan veya yerel Windows yüklemek için Windows sınıfını kullanabilirsiniz.

Not

Bir uygulamayı yüklemek için PowerShell'i "Yönetici olarak çalıştır" seçeneğiyle başlatmanız gerekir.

Uzaktan yüklerken, WMI alt sistemi PowerShell yollarını anlamayarak, .msi paketinin yolunu belirtmek için Bir Evrensel Adlandırma Kuralı (UNC) ağ yolu kullanın. Örneğin, uzak bilgisayar PC01'de bulunan NewPackage.msi paketini yüklemek için PowerShell isteminde aşağıdaki \\AppServ\dsp komutu yazın:

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

Windows Installer teknolojisini kullanmayan uygulamalar, otomatik dağıtım için uygulamaya özgü yöntemlere sahip olabilir. Uygulamanın belgelerini inceleyin veya uygulama satıcısının destek sistemine başvurun.

Uygulamaları Kaldırma

PowerShell kullanarak Windows Yükleyici paketini kaldırma, paket yüklemeyle yaklaşık olarak aynı şekilde çalışır. Kaldıracak paketi adına göre seçen bir örnek aşağıdaki gibidir: Bazı durumlarda, IdentifyingNumber ile filtrelemek daha kolay olabilir:

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

Yerel olarak yapılırken bile diğer uygulamaları kaldırmak o kadar basit değildir. UninstallString özelliğini ayıklaarak bu uygulamalar için komut satırı kaldırma dizelerini bulamıyorum. Bu yöntem, Windows Yükleyicisi uygulamaları ve Kaldır anahtarı altında görünen eski programlar için çalışır:

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

Çıktıyı, aşağıdaki gibi görünen adla filtreleysiniz:

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

Ancak, bu dizeler herhangi bir değişiklik yapmadan Doğrudan PowerShell isteminden kullanılabilir olabilir.

Windows Yükleyici Uygulamalarını Yükseltme

Bir uygulamayı yükseltmek için uygulamanın adını ve uygulama yükseltme paketinin yolunu biliyor olun. Bu bilgilerle, bir uygulamayı tek bir PowerShell komutuyla yükseltebilirsiniz:

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