5

特定のソースから Modules ディレクトリをコピーする DSC リソースを作成しました。私の環境でのより広範な展開のためにテストしています。リソースは、すべてのファイルがそこにあり、それらがソースコンテンツと一致することを保証する素晴らしい仕事をします.これまでのところとても良いです...

問題はこれです。ターゲットまたは宛先に追加のファイルがある場合、それらが削除されるフォルダーを確認したいと思います。

これが私のコードです:

Configuration TestRun
{
  Param 
    (
      $ComputerName = 'Localhost'
    )
  Node $ComputerName
    {
      File LoadModules
        {
          Ensure = 'Present'
          Type = 'Directory'
          Force = $true
          Recurse = $true
          SourcePath = "C:\git\Modules"
          DestinationPath = 'C:\users\Jason\Documents\WindowsPowerShell\Modules'
          Checksum = "SHA-256"
          MatchSource = $true
        }
    }
}

最初に構成を実行した後、Deleteme.flag という名前のファイルを宛先ディレクトリに作成してテストしました。これまでのところ、実際に削除されるという幸運はありませんでした。

実行前にディレクトリを削除するために、追加のファイルプロバイダー要件を追加しようとしました:

 File RemoveModules
    {
      Ensure = 'absent'
      Type = 'Directory'
      Force = $true
      Recurse = $true
      DestinationPath = 'C:\users\Jason\Documents\WindowsPowerShell\Modules'
    }

残念ながら、これは次のエラーで失敗します。

キー プロパティの組み合わせ 'C:\users\Jason\Documents\WindowsPowerShell\Modules' は、ノード 'Localhost' のリソース 'File' のキー 'DestinationPath' に対して複製されます。キー プロパティがノード内のリソースごとに一意であることを確認してください。

とにかく、ファイル リソースを使用して実行したいのですが、明らかに、スクリプト プロバイダーまたはその他のカスタム リソースを使用すると簡単に実行できます。ご協力いただきありがとうございます。

4

2 に答える 2

3

DSC初心者です。日曜日の午後の大部分をリソースを見て、これを解決する方法を見つけようとしました。ということで、心より感謝申し上げます。DSCを調べていて楽しかったです。

私は、これはうまくいくと思います:

Configuration TestRun
{
  Param 
    (
      $ComputerName = 'Localhost'
    )
    Node $ComputerName
    {
        Script RemoveModules { 
            GetScript = {#needs to return hashtable.}
            SetScript = { 
                $ump = "$HOME" + "\Documents\WindowsPowerShell\Modules\"
                Remove-Item -Path $ump -Recurse -Force
            }
            TestScript = { 
                $ump = "$HOME" + "\Documents\WindowsPowerShell\Modules\"
                $mp = "C:\git\Modules"
                if((Compare-Object $(gci $mp) $(gci $ump))){
                    $false #at least one difference exists, SetScript will be called.
                }else{
                    $true #nothing is different
                }

            }
        }
        File LoadModules
        {
            Ensure = 'Present'
            Type = 'Directory'
            Force = $true
            Recurse = $true
            SourcePath = "C:\git\Modules"
            DestinationPath = 'C:\users\Jason\Documents\WindowsPowerShell\Modules'
            DependsOn = "[Script]RemoveModules"
            Checksum = "SHA-256"
            MatchSource = $true
        }
    }
}

参考文献:

于 2014-04-20T09:46:22.410 に答える