我正在尝试添加上下文菜单(对于目录)选项" Open Sublime Project"和Sublime Text Editor 2的图标。
嗯,问题是如果我执行2个命令,执行是完美的,但是如果我执行脚本,只执行第一个命令。
输出: 没有错误
If ( -NOT(
([bool](New-Item -Path "HKLM:\Software\Classes\Directory\shell\Open Sublime Project\command" -Value "`"C:\Program Files\Sublime Text 2\sublime_text.exe`" --new-window %1" -Force)) -OR
([bool](New-ItemProperty -Path "HKLM:\Software\Classes\Directory\shell\Open Sublime Project" -Name "Icon" -PropertyType "String" -Value "`"C:\Program Files\Sublime Text 2\sublime_text.exe`",0" -Force))
)
)
{
Write-Host "Error"
}
Else
{
Write-Host "No errors"
}
答案 0 :(得分:5)
get-help about_Logical_Operators
:
Windows PowerShell逻辑运算符仅评估语句 需要确定声明的真值。如果是左边 包含和运算符的语句中的操作数是FALSE ,. 右操作数未被评估。 如果左边的操作数在一个语句中 包含or语句的是TRUE,右操作数不是 评估。因此,您可以以相同的方式使用这些语句 您将使用If语句。
您应该将执行与逻辑评估分开:
$val1 = New-Item -Path "HKLM:\Software\Classes\Directory\shell\Open Sublime Project\command" -Value "`"C:\Program Files\Sublime Text 2\sublime_text.exe`" --new-window %1" -Force)
$val2 = New-ItemProperty -Path "HKLM:\Software\Classes\Directory\shell\Open Sublime Project" -Name "Icon" -PropertyType "String" -Value "`"C:\Program Files\Sublime Text 2\sublime_text.exe`",0" -Force
If (-NOT($val1 -and $val2))
{
Write-Host "Error"
}
Else
{
Write-Host "No errors"
}
此外,我将-or
更改为-and
,因为使用或者,如果一个错误而另一个错误成功,则不会返回错误,这对我没有意义