Aracılığıyla paylaş


DSC Betik Kaynağı

Ş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.

kaynağını kullanmadan önce bunun yerine bir kaynak yazıp yazamayacağınızı göz önünde bulundurun. İyi tanımlanmış DSC kaynaklarını kullanmak yapılandırmalarınızı daha okunabilir ve sürdürülebilir hale getirir.

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çinPSDscResources başvuru belgelerine bakın.

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, get-DscConfiguration cmdlet'inin yürüterek düğümün geçerli durumunu alması için çıkışını kullanmaz. 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.