创建虚拟目录 exec 应用每个代理 运行
create virtual directory exec applies every agent run
我正在尝试使用以下方法创建虚拟目录,因为我在使用 IIS 模块时遇到问题。每次代理运行时它都会创建虚拟目录,因此我的 unless 语句似乎有问题。有人可以给我指出正确的方向吗?
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,
}
}
}
AFAICS 你有 2 个问题:
- 您的条件在单引号字符串中,所以我希望 Puppet 不会扩展变量
${k}
。
$test -eq $false
的计算结果应始终为 $false
,因为 PowerShell 在执行比较操作时会进行一些 black mag^W^Wimplicit 类型转换。因此,您需要注意要比较的内容和顺序。
示例:
PS C:\> 'false' -eq $false
True
PS C:\> $false -eq 'false'
False
上面的例子根据操作数的顺序给出了不同的结果,因为第二个操作数被隐式转换为匹配第一个操作数的类型。在导致 'false' -eq 'false'
的第一种情况下,计算结果为 true,但在第二种情况下,您得到 $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}'))
如果您更喜欢一些黑客价值更高的东西。
我正在尝试使用以下方法创建虚拟目录,因为我在使用 IIS 模块时遇到问题。每次代理运行时它都会创建虚拟目录,因此我的 unless 语句似乎有问题。有人可以给我指出正确的方向吗?
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,
}
}
}
AFAICS 你有 2 个问题:
- 您的条件在单引号字符串中,所以我希望 Puppet 不会扩展变量
${k}
。 $test -eq $false
的计算结果应始终为$false
,因为 PowerShell 在执行比较操作时会进行一些 black mag^W^Wimplicit 类型转换。因此,您需要注意要比较的内容和顺序。示例:
PS C:\> 'false' -eq $false True PS C:\> $false -eq 'false' False
上面的例子根据操作数的顺序给出了不同的结果,因为第二个操作数被隐式转换为匹配第一个操作数的类型。在导致
'false' -eq 'false'
的第一种情况下,计算结果为 true,但在第二种情况下,您得到$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}'))
如果您更喜欢一些黑客价值更高的东西。