Installieren einer Cab-Datei mit dem angegebenen Namen aus dem angegebenen Pfad
Beschreibung
In diesem Beispiel wird gezeigt, wie Sie die vom Benutzer bereitgestellten WindowsPackageCab
Ressourcenwerte verwenden können, um sicherzustellen, dass ein Paket installiert ist.
Sie müssen den Namen des Pakets mit dem Parameter "Name " angeben, der die Name-Eigenschaft der Ressource festlegt.
Sie müssen den Pfad zur Datei angeben, aus der .cab
das Paket mit dem SourcePath-Parameter installiert werden kann, der die SourcePath-Eigenschaft der Ressource festlegt.
Sie müssen den Pfad zu einer Protokolldatei mit dem LogPath-Parameter angeben, der die LogPath-Eigenschaft der Ressource festlegt.
Wenn Sie sicherstellenPresent
, dass die Name-Eigenschaft auf den vom Benutzer bereitgestellten Wert vom Parameter "Name" festgelegt ist, und SourcePath auf den vom Benutzer bereitgestellten Wert aus dem SourcePath-Parameter festgelegt ist, installiert die Ressource das benannte Paket aus der angegebenen .cab
Datei, wenn sie nicht bereits installiert ist.
Wenn LogPath auf den vom Benutzer bereitgestellten Wert aus dem LogPath-Parameter festgelegt ist, schreibt die Ressource die Protokolle zum Installieren des Pakets in diese Datei statt .%WINDIR%\Logs\Dism\dism.log
Mit Invoke-DscResource
Dieses Skript zeigt, wie Sie die WindowsPackageCab
Ressource mit dem Invoke-DscResource
Cmdlet verwenden können, um sicherzustellen, dass ein vom Benutzer angegebenes Paket installiert ist.
[CmdletBinding()]
param(
[Parameter (Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[String]
$Name,
[Parameter (Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[String]
$SourcePath,
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[String]
$LogPath
)
begin {
$SharedParameters = @{
Name = 'WindowsPackageCab'
ModuleName = 'PSDscResource'
Properties = @{
Name = $Name
Ensure = 'Present'
SourcePath = $SourcePath
LogPath = $LogPath
}
}
$NonGetProperties = @(
'Ensure'
'SourcePath'
'LogPath'
)
}
process {
$TestResult = Invoke-DscResource -Method Test @SharedParameters
if ($TestResult.InDesiredState) {
$QueryParameters = $SharedParameters.Clone()
foreach ($Property in $NonGetProperties) {
$QueryParameters.Properties.Remove($Property)
}
Invoke-DscResource -Method Get @QueryParameters
} else {
Invoke-DscResource -Method Set @SharedParameters
}
}
Mit einer Konfiguration
In diesem Codeausschnitt wird gezeigt, wie Sie einen WindowsPackageCab
Ressourcenblock definieren Configuration
können, um sicherzustellen, dass ein vom Benutzer angegebenes Paket installiert ist.
Wichtig
Es gibt eine Einschränkung in der Computerkonfiguration, die verhindert, dass eine DSC-Ressource keine PowerShell-Cmdlets verwendet, die nicht in PowerShell selbst oder in einem Modul auf dem PowerShell-Katalog enthalten sind. Dieses Beispiel wird für demonstrative Zwecke bereitgestellt, aber da die DSC-Ressource Cmdlets aus dem DISM-Modul verwendet, das als eines der Windows-Module bereitgestellt wird, funktioniert sie nicht in der Computerkonfiguration.
Configuration Install {
param(
[Parameter (Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[String]
$Name,
[Parameter (Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[String]
$SourcePath,
[Parameter(Mandatory = $true)]
[ValidateNotNullOrEmpty()]
[String]
$LogPath
)
Import-DscResource -ModuleName 'PSDscResources'
Node Localhost {
WindowsPackageCab ExampleWindowsPackageCab {
Name = $Name
Ensure = 'Present'
SourcePath = $SourcePath
LogPath = $LogPath
}
}
}