Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: Windows PowerShell 4.0, Windows PowerShell 5.x
Windows PowerShell İstenen Durum Yapılandırması'ndaki (DSC) Script kaynağı, hedef düğümlerde Windows PowerShell betik bloklarını çalıştırmaya yönelik bir mekanizma sağlar.
Script kaynağı GetScriptSetScriptkullanır ve karşılık gelen DSC durum işlemlerini gerçekleştirmek için tanımladığınız betik bloklarını içeren özellikleri TestScript.
Bahşiş
Mümkün olduğunda, bunun yerine tanımlı bir DSC kaynağı kullanmak en iyi yöntemdir.
Script kaynağının test, bakım ve tahminde bulunmayı zorlaştıran dezavantajları vardır.
Diğer DSC kaynaklarının aksine, Script kaynağın her özelliği bir anahtar özelliktir ve bu kaynağın Get yöntemi geçerli durum için yalnızca tek bir dize döndürebilir. Bu kaynağın aynı anda uygulandığının veya özel kod kullandığından herhangi bir sistemde beklendiği gibi çalışacağının garantisi yoktur. Hedef sistemde çağrılmadan test edilemiyor.
Not
Bu DSC kaynağının bu belgeleri, PowerShell'in 7.2 sürümünden önceki sürümünü kapsar. PSDscResources modülü, Microsoft tarafından resmi olarak desteklenen yeni ve güncelleştirilmiş DSC Kaynaklarını içerir. PSDscResources modülü PowerShell Galerisi'nden edinilebilir.
Daha fazla bilgi ve güncelleştirilmiş belgeler için
Sözdizimi
Script [string] #ResourceName
{
GetScript = [string]
SetScript = [string]
TestScript = [string]
[ Credential = [PSCredential] ]
[ DependsOn = [string[]] ]
[ PsDscRunAsCredential = [PSCredential] ]
}
Not
GetScript
TestScriptve SetScript blokları dize olarak depolanır.
Özellikler
| Mülk | Açıklama |
|---|---|
| GetScript | Düğümün geçerli durumunu döndüren bir betik bloğu. |
| SetScript | DSC'nin Node istenen durumda olmadığında uyumluluğu zorlamak için kullandığı bir betik bloğu. |
| TestScript | Düğümün istenen durumda olup olmadığını belirleyen bir betik bloğu. |
| Kimlik bilgisi | Kimlik bilgileri gerekiyorsa, bu betiği çalıştırmak için kullanılacak kimlik bilgilerini gösterir. |
Ortak özellikler
| Mülk | Açıklama |
|---|---|
| DependsOn | Bu kaynak yapılandırılmadan önce başka bir kaynağın yapılandırmasının çalıştırılması gerektiğini gösterir. |
| PsDscRunAsCredential | Kaynağın tamamını farklı çalıştırmak için kimlik bilgilerini ayarlar. |
Not
PsDscRunAsCredential common özelliği, diğer kimlik bilgileri bağlamında herhangi bir DSC kaynağının çalıştırılmasına izin vermek için WMF 5.0'a eklendi. Daha fazla bilgi için bkz. Kimlik Bilgilerini DSC Kaynaklarıyla Kullanma.
Ek bilgiler
GetScript
DSC, GetScript'den dönüş değeri gerekli değildir Bir dönüş değeri belirtirseniz, değeri Dize olan Sonuç anahtarı içeren bir karma tablo olmalıdır.
TestScript
DSC, SetScript çalıştırılıp çalıştırılmaması gerektiğini belirlemek için TestScript yürütür.
TestScript
$falsedöndürürse, DSC düğümü istenen duruma geri getirmek için SetScript yürütür. Boole değeri döndürmelidir.
$true sonucu, düğümün uyumlu olduğunu ve SetScript yürütülmemesi gerektiğini gösterir.
Test-DscConfiguration cmdlet'i, düğümlerin Script kaynaklarıyla uyumluluğunu almak için TestScript yürütülür. Ancak bu durumda SetScript, hangi TestScript bloğu döndürürse döndürsün çalışmaz.
Not
TestScript tüm çıkış, dönüş değerinin bir parçasıdır. PowerShell, desteklenmeyen çıkışı sıfır olmayan olarak yorumlar; bu da TestScript düğümünüzün durumundan bağımsız olarak $true döndürdüğü anlamına gelir. Bu, öngörülemeyen sonuçlara, hatalı pozitif sonuçlara neden olur ve sorun giderme sırasında zorluğa neden olur.
SetScript
SetScript istenen durumu zorlamak için düğümü değiştirir.
TestScript betik bloğu $falsedöndürürse DSC SetScript çağırır.
SetScript dönüş değeri olmamalıdır.
Örnekler
Örnek 1: Betik kaynağı kullanarak örnek metin yazma
Bu örnek, her düğümde C:\TempFolder\TestFile.txt varlığını sınar. Yoksa, SetScriptkullanarak oluşturur.
GetScript dosyanın içeriğini döndürür ve dönüş değeri kullanılmaz.
Configuration ScriptTest
{
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
Node localhost
{
Script ScriptExample
{
SetScript = {
$sw = New-Object System.IO.StreamWriter("C:\TempFolder\TestFile.txt")
$sw.WriteLine("Some sample string")
$sw.Close()
}
TestScript = { Test-Path "C:\TempFolder\TestFile.txt" }
GetScript = { @{ Result = (Get-Content C:\TempFolder\TestFile.txt) } }
}
}
}
Örnek 2: Betik kaynağı kullanarak sürüm bilgilerini karşılaştırma
Bu örnek, yazma bilgisayarındaki bir metin dosyasından uyumlu sürüm bilgilerini alır ve $version değişkeninde depolar. Düğümün MOF dosyasını oluştururken DSC, her betik bloğundaki $using:version değişkenlerini $version değişkeninin değeriyle değiştirir. Yürütme sırasında, uyumlu sürümü her Düğümdeki bir metin dosyasında depolanır ve sonraki yürütmelerde karşılaştırılır ve güncelleştirilir.
$version = Get-Content 'version.txt'
Configuration ScriptTest
{
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
Node localhost
{
Script UpdateConfigurationVersion
{
GetScript = {
$currentVersion = Get-Content (Join-Path -Path $env:SYSTEMDRIVE -ChildPath 'version.txt')
return @{ 'Result' = "$currentVersion" }
}
TestScript = {
# Create and invoke a scriptblock using the $GetScript automatic variable, which contains a string representation of the GetScript.
$state = [scriptblock]::Create($GetScript).Invoke()
if( $state.Result -eq $using:version )
{
Write-Verbose -Message ('{0} -eq {1}' -f $state.Result,$using:version)
return $true
}
Write-Verbose -Message ('Version up-to-date: {0}' -f $using:version)
return $false
}
SetScript = {
$using:version | Set-Content -Path (Join-Path -Path $env:SYSTEMDRIVE -ChildPath 'version.txt')
}
}
}
}
Örnek 3: Betik kaynağında parametreleri kullanma
Bu örnek, using kapsamını kullanarak Betik kaynağının içinden parametrelere erişir.
ConfigurationData benzer şekilde erişilebilir. Örnek 2 gibi, uygulama bir sürümün hedef düğümdeki yerel bir dosyanın içinde depolanmasını bekler. Hem yerel yol hem de sürüm yapılandırılabilir ve yapılandırma verilerinden kod ayrıştırılır.
Configuration ScriptTest
{
param
(
[Version]
$Version,
[string]
$FilePath
)
Import-DscResource -ModuleName 'PSDesiredStateConfiguration'
Node localhost
{
Script UpdateConfigurationVersion
{
GetScript = {
$currentVersion = Get-Content -Path $using:FilePath
return @{ 'Result' = "$currentVersion" }
}
TestScript = {
# Create and invoke a scriptblock using the $GetScript automatic variable,
# which contains a string representation of the GetScript.
$state = [scriptblock]::Create($GetScript).Invoke()
if( $state['Result'] -eq $using:Version )
{
Write-Verbose -Message ('{0} -eq {1}' -f $state['Result'],$using:version)
return $true
}
Write-Verbose -Message ('Version up-to-date: {0}' -f $using:version)
return $false
}
SetScript = {
Set-Content -Path $using:FilePath -Value $using:Version
}
}
}
}
Sonuçta elde edilen MOF dosyası, using kapsamı aracılığıyla erişilen değişkenleri ve değerlerini içerir.
Bunlar, değişkenleri kullanan her betik bloğuna eklenmişlerdir. Test ve Set betikleri kısa süre için kaldırılır:
instance of MSFT_ScriptResource as $MSFT_ScriptResource1ref
{
GetScript = "$FilePath ='C:\\Config.ini'\n\n $currentVersion = Get-Content -Path $FilePath\n return @{ 'Result' = \"$currentVersion\" }\n";
TestScript = ...;
SetScript = ...;
};
Bilinen Sınırlamalar
- Bir betik kaynağı içinde geçirilen kimlik bilgileri, çekme veya gönderme sunucusu modeli kullanılırken her zaman güvenilir değildir. Bu durumda betik kaynağı kullanmak yerine tam kaynak kullanın.