Met software-installaties werkenWorking with Software Installations

Toepassingen die zijn ontworpen voor gebruik van Windows Installer is toegankelijk via WMI van Win32_Product klasse, maar niet alle toepassingen in gebruik vandaag gebruik van Windows Installer.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. Omdat Windows Installer een groot aantal standaard technieken biedt voor het werken met installeerbare toepassingen, gaan we in voornamelijk op deze toepassingen.Because the Windows Installer provides the widest range of standard techniques for working with installable applications, we will focus primarily on those applications. Toepassingen die gebruikmaken van routines alternatieve instellen zullen in het algemeen niet worden beheerd door de Windows Installer.Applications that use alternate setup routines will generally not be managed by the Windows Installer. Specifieke technieken voor het werken met deze toepassingen, is afhankelijk van de installer-software en de beslissingen van de ontwikkelaar van de toepassing.Specific techniques for working with those applications will depend on the installer software and decisions made by the application developer.

Notitie

De door toepassingsbestanden te kopiëren naar de computer doorgaans geïnstalleerde toepassingen kunnen niet worden beheerd met behulp van technieken die worden besproken hier.Applications that are installed by copying the application files to the computer usually cannot be managed by using techniques discussed here. U kunt deze toepassingen als bestanden en mappen beheren met behulp van de technieken beschreven in de sectie 'Werken met bestanden en mappen'.You can manage these applications as files and folders by using the techniques discussed in the "Working With Files and Folders" section.

Windows Installer-toepassingen weergevenListing Windows Installer Applications

Als de toepassingen zijn geïnstalleerd met Windows Installer op een lokale of externe systeem weergeven, gebruikt u de volgende eenvoudige WMI-query:To list the applications installed with the Windows Installer on a local or remote system, use the following simple WMI query:

PS> Get-WmiObject -Class Win32_Product -ComputerName .

IdentifyingNumber : {7131646D-CD3C-40F4-97B9-CD9E4E6262EF}
Name              : Microsoft .NET Framework 2.0
Vendor            : Microsoft Corporation
Version           : 2.0.50727
Caption           : Microsoft .NET Framework 2.0

Als u wilt weergeven alle eigenschappen van het object Win32_Product naar de weergave, gebruikt u de eigenschappen-parameter van de opmaak cmdlets, zoals de cmdlet lijst indelen met een waarde van * (alle).To display all of 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).

PS> Get-WmiObject -Class Win32_Product -ComputerName . | Where-Object -FilterScript {$_.Name -eq "Microsoft .NET Framework 2.0"} | Format-List -Property *

Name              : Microsoft .NET Framework 2.0
Version           : 2.0.50727
InstallState      : 5
Caption           : Microsoft .NET Framework 2.0
Description       : Microsoft .NET Framework 2.0
IdentifyingNumber : {7131646D-CD3C-40F4-97B9-CD9E4E6262EF}
InstallDate       : 20060506
InstallDate2      : 20060506000000.000000-000
InstallLocation   :
PackageCache      : C:\WINDOWS\Installer\619ab2.msi
SKUNumber         :
Vendor            : Microsoft Corporation

Of u kunt de Get-WmiObject Filter parameter alleen Microsoft .NET Framework 2.0 te selecteren.Or, you could use the Get-WmiObject Filter parameter to select only Microsoft .NET Framework 2.0. Omdat het filter dat wordt gebruikt in deze opdracht een WMI-filter is, gebruikt de syntaxis van de WMI Query Language (WQL), niet voor Windows PowerShell-syntaxis.Because the filter used in this command is a WMI filter, it uses WMI Query Language (WQL) syntax, not Windows PowerShell syntax. In plaats daarvan:Instead,:

Get-WmiObject -Class Win32_Product -ComputerName . -Filter "Name='Microsoft .NET Framework 2.0'"| Format-List -Property *

Houd er rekening mee dat WQL-query's vaak gebruik tekens, zoals spaties of gelijk tekens, die een speciale betekenis in Windows PowerShell hebben.Note that WQL queries frequently use characters, such as spaces or equal signs, that have a special meaning in Windows PowerShell. Daarom is het verstandig om te altijd de waarde van de parameter Filter plaats tussen aanhalingstekens.For this reason, it is prudent to always enclose the value of the Filter parameter in quotation marks. U kunt ook de Windows PowerShell-escape-teken, een backtick (`), hoewel deze mogelijk niet betere leesbaarheid.You can also use the Windows PowerShell escape character, a backtick (`), although it may not improve readability. De volgende opdracht komt overeen met de vorige opdracht en dezelfde resultaten retourneert, maar de backtick gebruikt als escapeteken voor speciale tekens, in plaats van de hele filtertekenreeks aan te geven.The following command is equivalent to the previous command and returns the same results, but uses the backtick to escape special characters, instead of quoting the entire filter string.

Get-WmiObject -Class Win32_Product -ComputerName . -Filter Name`=`'Microsoft` .NET` Framework` 2.0`' | Format-List -Property *

U kunt alleen de eigenschappen die u interesseren gebruiken de parameter Property van de opmaak-cmdlets voor een lijst met de gewenste eigenschappen.To list only the properties that interest you, use the Property parameter of the formatting cmdlets to list the desired properties.

Get-WmiObject -Class Win32_Product -ComputerName . | Format-List -Property Name,InstallDate,InstallLocation,PackageCache,Vendor,Version,IdentifyingNumber
...
Name              : HighMAT Extension to Microsoft Windows XP CD Writing Wizard
InstallDate       : 20051022
InstallLocation   : C:\Program Files\HighMAT CD Writing Wizard\
PackageCache      : C:\WINDOWS\Installer\113b54.msi
Vendor            : Microsoft Corporation
Version           : 1.1.1905.1
IdentifyingNumber : {FCE65C4E-B0E8-4FBD-AD16-EDCBE6CD591F}
...

Ten slotte vinden alleen de namen van de geïnstalleerde toepassingen, een eenvoudige indeling hele instructie vereenvoudigt de uitvoer:Finally, to find only the names of installed applications, a simple Format-Wide statement simplifies the output:

Get-WmiObject -Class Win32_Product -ComputerName .  | Format-Wide -Column 1

Hoewel we nu verschillende manieren om te kijken naar toepassingen die het Windows-installatieprogramma voor installatie gebruikt hebben, hebben we niet beschouwd als andere toepassingen.Although we now have several ways to look at applications that used the Windows Installer for installation, we have not considered other applications. Omdat hun verwijderprogramma meest standaardtoepassingen bij Windows registreren, kunnen we werken met die lokaal door ze te zoeken in het Windows-register.Because most standard applications register their uninstaller with Windows, we can work with those locally by finding them in the Windows registry.

Alle kan worden verwijderd toepassingen weergevenListing All Uninstallable Applications

Hoewel er geen gegarandeerde manier om te zoeken naar elke toepassing die op een systeem, is het mogelijk om alle programma's met aanbiedingen weergegeven in het dialoogvenster een programma verwijderen of vinden.Although there is no guaranteed way to find every application on a system, it is possible to find all programs with listings displayed in the Add or Remove Programs dialog box. Toevoegen of software vindt deze toepassingen in de volgende registersleutel:Add or Remove Programs finds these applications in the following registry key:

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

We kunnen deze sleutel om te zoeken naar toepassingen onderzoeken.We can also examine this key to find applications. Om het gemakkelijker om weer te geven van de sleutel verwijderen, kunnen we een Windows PowerShell-station toewijzen aan deze registerlocatie:To make it easier to view the Uninstall key, we can map a Windows PowerShell drive to this registry location:

PS> New-PSDrive -Name Uninstall -PSProvider Registry -Root HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Name       Provider      Root                                   CurrentLocation
----       --------      ----                                   ---------------
Uninstall  Registry      HKEY_LOCAL_MACHINE\SOFTWARE\Micr...

Notitie

De HKLM: station is toegewezen aan de hoofdmap van HKEY_LOCAL_MACHINE, zodat we dat station in het pad naar de sleutel verwijderen gebruikt.The HKLM: drive is mapped to the root of HKEY_LOCAL_MACHINE, so we used that drive in the path to the Uninstall key. In plaats van HKLM: we kan het registerpad hebt opgegeven met behulp van HKLM of HKEY_LOCAL_MACHINE.Instead of HKLM: we could have specified the registry path by using either HKLM or HKEY_LOCAL_MACHINE. Het voordeel van een bestaand register-station is dat we invullen van de tabbladen gebruiken kunt om in te vullen de namen van sleutels, zodat we niet hoeft te geven.The advantage of using an existing registry drive is that we can use tab-completion to fill in the keys names, so we do not need to type them.

We hebben nu een station met de naam 'Verwijderen' die kan worden gebruikt om snel en gemakkelijk zoekt installaties van toepassingen.We now have a drive named "Uninstall" that can be used to quickly and conveniently look for application installations. We kunnen het aantal geïnstalleerde toepassingen zoeken door het aantal registersleutels in het verwijderen te tellen: Windows PowerShell-station:We can find the number of installed applications by counting the number of registry keys in the Uninstall: Windows PowerShell drive:

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

We kunnen deze lijst van toepassingen meer zoeken met behulp van tal van technieken vanaf Get-ChildItem.We can search this list of applications further by using a variety of techniques, beginning with Get-ChildItem. Een lijst met toepassingen ophalen en opslaan in de $UninstallableApplications variabele, gebruikt u de volgende opdracht:To get a list of applications and save them in the $UninstallableApplications variable, use the following command:

$UninstallableApplications = Get-ChildItem -Path Uninstall:

Notitie

We langdurige variabele hier een naam voor de duidelijkheid gebruiken.We are using a lengthy variable name here for clarity. Er is geen reden lang namen gebruiken in het werkelijke gebruik.In actual use, there is no reason to use long names. Hoewel u tabblad voltooiing voor namen van variabelen gebruiken kunt, kunt u ook 1-2 teken namen voor snelheid.Although you can use tab-completion for variable names, you can also use 1-2 character names for speed. Langer, beschrijvende namen zijn handig als u code opnieuw kunnen worden gebruikt ontwikkelt.Longer, descriptive names are most useful when you are developing code for reuse.

Gebruik de methode GetValue van de registersleutels zodat de waarden van de registervermeldingen in de registersleutels onder verwijderen.To display the values of the registry entries in the registry keys under Uninstall, use the GetValue method of the registry keys. De waarde van de methode is de naam van het register-item.The value of the method is the name of the registry entry.

Bijvoorbeeld, om de namen weergegeven van toepassingen in de sleutel verwijderen, gebruik de volgende opdracht:For example, to find the display names of applications in the Uninstall key, use the following command:

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

Er is geen garantie dat deze waarden uniek zijn.There is no guarantee that these values are unique. In het volgende voorbeeld worden twee geïnstalleerde items weergegeven als 'Windows Media Encoder 9 Series':In the following example, two installed items appear as "Windows Media Encoder 9 Series":

PS> Get-ChildItem -Path Uninstall: | Where-Object -FilterScript { $_.GetValue("DisplayName") -eq "Windows Media Encoder 9 Series"}

   Hive: Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Micros
oft\Windows\CurrentVersion\Uninstall

SKC  VC Name                           Property
---  -- ----                           --------
  0   3 Windows Media Encoder 9        {DisplayName, DisplayIcon, UninstallS...
  0  24 {E38C00D0-A68B-4318-A8A6-F7... {AuthorizedCDFPrefix, Comments, Conta...

Installatie van toepassingenInstalling Applications

U kunt de Win32_Product klasse voor het installeren van Windows Installer-pakketten extern of lokaal.You can use the Win32_Product class to install Windows Installer packages, remotely or locally.

Notitie

Op Windows Vista, Windows Server 2008 en nieuwere versies van Windows, een toepassing te installeren, moet u beginnen Windows PowerShell met de optie 'Als administrator uitvoeren'.On Windows Vista, Windows Server 2008, and later versions of Windows, to install an application, you must start Windows PowerShell with the "Run as administrator" option.

Bij het op afstand installeren via een netwerkpad Universal Naming Convention (UNC) opgeven het pad naar het MSI-pakket, omdat het WMI-subsysteem niet paden met Windows PowerShell begrijpt.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 Windows PowerShell paths. Bijvoorbeeld, zich in de netwerkshare voor het installeren van het pakket NewPackage.msi \ \AppServ\dsp op de externe computer PC01, typ de volgende opdracht achter de Windows PowerShell-prompt: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 Windows PowerShell prompt:

(Get-WMIObject -ComputerName PC01 -List | Where-Object -FilterScript {$_.Name -eq 'Win32_Product'}).Install(\\AppSrv\dsp\NewPackage.msi)

Toepassingen die geen van Windows Installer-technologie gebruikmaken misschien toepassingsspecifieke methoden beschikbaar voor automatische implementatie.Applications that do not use Windows Installer technology may have application-specific methods available for automated deployment. Raadpleeg de documentatie voor de toepassing om te bepalen of er een methode voor het automatiseren van de implementatie is, of neem contact op ondersteuningssysteem van de leverancier van de toepassing.To determine whether there is a method for deployment automation, check the documentation for the application or consult the application vendor's support system. In sommige gevallen, zelfs als de toepassing voor het automatiseren van de installatie is niet specifiek ontwerp-leverancier van de toepassing de fabrikant van de software installer mogelijk bepaalde technieken voor automatisering.In some cases, even if the application vendor did not specifically design the application for installation automation, the installer software manufacturer may have some techniques for automation.

Toepassingen verwijderenRemoving Applications

Verwijderen van een Windows Installer-pakket met Windows PowerShell werkt op ongeveer dezelfde manier als een pakket installeert.Removing a Windows Installer package by using Windows PowerShell works in approximately the same way as installing a package. Hier volgt een voorbeeld waarin selecteert het pakket te verwijderen op basis van de naam; in sommige gevallen kan zijn gemakkelijker te filteren met de id-nummer: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-WmiObject -Class Win32_Product -Filter "Name='ILMerge'" -ComputerName . ).Uninstall()

Verwijderen van andere toepassingen is niet zo eenvoudig, zelfs wanneer lokaal wordt uitgevoerd.Removing other applications is not quite so simple, even when done locally. We kunnen de opdrachtregel verwijderen tekenreeksen vinden voor deze toepassingen door uit te pakken de UninstallString eigenschap.We can find the command line uninstallation strings for these applications by extracting the UninstallString property. Deze methode werkt voor Windows Installer-toepassingen en oudere programma's die wordt weergegeven onder de sleutel verwijderen: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') }

U kunt de uitvoer als u dit wilt filteren op de weergavenaam: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') }

Maar deze tekenreeksen mogelijk niet direct toegankelijk is vanaf de Windows PowerShell-prompt zonder enige aanpassing.However, these strings may not be directly usable from the Windows PowerShell prompt without some modification.

Een upgrade van Windows Installer-toepassingenUpgrading Windows Installer Applications

Om een toepassing een upgrade uitvoert, moet u de naam van de toepassing en het pad op het updatepakket van een toepassing weet.To upgrade an application, you need to know the name of the application and the path to the application upgrade package. Deze informatie kunt u een toepassing met een enkel Windows PowerShell-opdracht upgraden:With that information, you can upgrade an application with a single Windows PowerShell command:

(Get-WmiObject -Class Win32_Product -ComputerName . -Filter "Name='OldAppName'").Upgrade(\\AppSrv\dsp\OldAppUpgrade.msi)