错误IF语句

use*_*030 2 powershell if-statement

我正在尝试添加上下文菜单(对于目录)选项"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"
}
Run Code Online (Sandbox Code Playgroud)

Col*_*350 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"
}
Run Code Online (Sandbox Code Playgroud)

另外,我更改-or-and,因为使用或者,如果一个错误而另一个错误成功,它将不返回任何错误,这对我来说没有意义