2017-09-18 1 views
1

IISモジュールに問題があるため、以下の方法で仮想ディレクトリを作成しようとしています。エージェントが実行されるたびに仮想ディレクトリが作成されるため、私のunless文で何か問題があるようです。誰かが私を正しい方向に向けることができますか?あなたが持っている仮想ディレクトリを作成するexecすべてのエージェントを実行する

class directories { 
    $directories = { 
    'test_dir' => 'virt_dir_path' 
    } 

    $directories.each |$k, $v| { 
    exec { $k: 
     unless => '$test = Get-WebVirtualDirectory -Site website -Name "${k}"; 
     if ($test -eq $false) {exit 1} else {exit 0}', 
     command => 'New-WebVirtualDirectory -Site website -Name ${k} -PhysicalPath ${v}', 
     provider => powershell, 
    } 
    } 
} 

答えて

3

AFAICS 2つの問題:

  • あなたの条件は、単一引用符で囲まれた文字列であるので、私は人形が変数${k}を拡大しないことを期待したいです。
  • $test -eq $falseは、比較操作を実行するときにPowerShellがいくつかの黒い^^Wimplicit型の変換を実行するので、常に$falseと評価されます。そのため、あなたは何をどの順序で比較しているのかに注意を払う必要があります。

    例:第2オペランドは、暗黙的に最初のオペランドの型と一致するように変換されるため

     
    PS C:\>'false' -eq $false 
    True 
    PS C:\>$false -eq 'false' 
    False 
    

    上記の例では、オペランドの順序に応じて異なる結果が得られます。最初のケースでは'false' -eq 'false'となり、2番目のケースでは$false -eq $true(明らかにfalseと評価されます)が表示されます。これは、PowerShellがブール値コンテキストでnon-empty strings as $trueを解釈するためです。

はこのような何かにあなたのコードを変更し

$directories.each |$k, $v| { 
    exec { $k: 
    command => "New-WebVirtualDirectory -Site website -Name '${k}' -PhysicalPath '${v}'", 
    unless => "if (Get-WebVirtualDirectory -Site website -Name '${k}') {exit 0} else {exit 1}", 
    provider => powershell, 
    } 
} 

をもう少しハック値で何かを好む場合にも、条件

exit (1 - [int][bool](Get-WebVirtualDirectory -Site website -Name '${k}')) 

作ることができます。

+0

あなたのキーボードは、その2番目の箇条書きポイントで反転したと思います。 –

+0

@MattSchuchardそれはなぜですか? –

+0

"some black mag^W^Wimplicit" –

関連する問題