Instalar ou desinstalar um recurso do Windows
Descrição
Este exemplo mostra como você pode usar o WindowsFeature
recurso para garantir que um recurso do Windows seja:
- Instalado ou desinstalado
- Se ele está instalado com suas sub-estruturas
- Se ele está instalado como uma conta específica
Todos os valores do recurso são fornecidos pelo usuário, não codificados. Os parâmetros são mapeados para as propriedades do recurso, alterando seu comportamento.
Nome
Se você não especificar o parâmetro Name , a propriedade Name do recurso será definida como Telnet-Client
. Esse recurso do Windows é instalado ou desinstalado pelo recurso.
Ensure
Se você não especificar o parâmetro Ensure , a propriedade Ensure do recurso será definida Present
e o recurso instalará o recurso do Windows se ele ainda não estiver instalado.
Se você especificar Garantir como Absent
, o recurso desinstala o recurso do Windows se ele estiver instalado.
IncludeAllSubFeature
Se você não especificar o parâmetro IncludeAllSubFeature , a propriedade IncludeAllSubFeature do recurso será definida $false
e o recurso não instalará as subfeatures do recurso do Windows se Ensure estiver definido como Present
.
Se Ensure estiver definido como Absent
, o recurso sempre desinstala as subfeaturas de qualquer recurso do Windows que ele remove.
Credencial
Se você não especificar o parâmetro credencial , o recurso não definirá a propriedade Credencial e instalará ou desinstala o recurso do Windows na conta padrão.
LogPath
Se você não especificar o parâmetro LogPath , o recurso não definirá a propriedade LogPath e não gravará os logs para instalar ou desinstalar o recurso do Windows em um arquivo.
Com Invoke-DscResource
Este script mostra como você pode usar o WindowsFeature
recurso com o Invoke-DscResource
cmdlet para garantir que um recurso do Windows esteja instalado ou instalado com configurações fornecidas pelo usuário.
Por padrão, ele garante que o recurso do Telnet-Client
Windows esteja instalado sem subfeaturas e não escreva os logs de instalação em um arquivo.
[CmdletBinding()]
param(
[System.String]
$Name = 'Telnet-Client',
[ValidateSet('Present', 'Absent')]
[System.String]
$Ensure = 'Present',
[System.Boolean]
$IncludeAllSubFeature = $false,
[System.Management.Automation.PSCredential]
[System.Management.Automation.Credential()]
$Credential,
[ValidateNotNullOrEmpty()]
[System.String]
$LogPath
)
begin {
$SharedParameters = @{
Name = 'WindowsFeature'
ModuleName = 'PSDscResource'
Properties = @{
Name = $Name
Ensure = $Ensure
IncludeAllSubFeature = $IncludeAllSubFeature
}
}
$NonGetProperties = @(
'Ensure'
'IncludeAllSubFeature'
)
}
process {
if ($PSBoundParameters.ContainsKey('Credential')) {
$SharedParameters.Properties.Credential = $Credential
$NonGetProperties += 'Credential'
}
if ($PSBoundParameters.ContainsKey('LogPath')) {
$SharedParameters.Properties.LogPath = $LogPath
$NonGetProperties += 'LogPath'
}
$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
}
}
Com uma configuração
Este snippet mostra como você pode definir um com um Configuration
WindowsFeature
bloco de recursos para garantir que um recurso do Windows esteja instalado ou instalado com configurações fornecidas pelo usuário.
Por padrão, ele garante que o recurso do Telnet-Client
Windows esteja instalado sem subfeaturas e não escreva os logs de instalação em um arquivo.
Importante
Há uma limitação na configuração do computador que impede que um recurso DSC use quaisquer cmdlets do PowerShell não incluídos no próprio PowerShell ou em um módulo no Galeria do PowerShell. Este exemplo é fornecido para fins demonstrativos, mas como o Recurso DSC usa cmdlets do módulo DISM, que é fornecido como um dos módulos do Windows, ele não funcionará na configuração do computador.
Configuration Example {
param(
[System.String]
$Name = 'Telnet-Client',
[ValidateSet('Present', 'Absent')]
[System.String]
$Ensure = 'Present',
[System.Boolean]
$IncludeAllSubFeature = $false,
[System.Management.Automation.PSCredential]
[System.Management.Automation.Credential()]
$Credential,
[ValidateNotNullOrEmpty()]
[System.String]
$LogPath
)
Import-DscResource -ModuleName 'PSDscResources'
$HasCredential = $null -ne $Credential
$HasLogPath = ![string]::IsNullOrEmpty($LogPath)
Node Localhost {
if ($HasCredential -and $HasLogPath) {
WindowsFeature ExampleWindowsFeature {
Name = $Name
Ensure = $Ensure
IncludeAllSubFeature = $IncludeAllSubFeature
Credential = $Credential
LogPath = $LogPath
}
} elseif ($HasCredential) {
WindowsFeature ExampleWindowsFeature {
Name = $Name
Ensure = $Ensure
IncludeAllSubFeature = $IncludeAllSubFeature
Credential = $Credential
}
} elseif ($HasLogPath) {
WindowsFeature ExampleWindowsFeature {
Name = $Name
Ensure = $Ensure
IncludeAllSubFeature = $IncludeAllSubFeature
LogPath = $LogPath
}
} else {
WindowsFeature ExampleWindowsFeature {
Name = $Name
Ensure = $Ensure
IncludeAllSubFeature = $IncludeAllSubFeature
}
}
}
}