PowerShell布尔表达式

时间:2015-02-18 21:08:21

标签: windows powershell scripting boolean select-string

我正在编写一个powershell脚本但是在评估布尔表达式时遇到了问题。

这是我遇到问题的代码行:

if (Get-Content .\Process2Periods.xmla | Select-String ((Get-Date) | Get-Date -Format "yyyyMM") -quiet -ne True)

尝试运行时收到此错误消息:

Select-String : A parameter cannot be found that matches parameter name 'ne'.

请帮我理解这个问题。

同样对于一个小上下文,我正在搜索文件中的字符串,如果它不存在,我想执行if块中的内容。我没有将代码粘贴到if语句中,因为我认为它不相关,但如果您愿意,请告诉我。

2 个答案:

答案 0 :(得分:4)

PowerShell将-ne解释为Select-String的参数。要解决此问题,您可以删除-ne True部分并改为使用-not operator

if (-not (Get-Content .\Process2Periods.xmla | Select-String ((Get-Date) | Get-Date -Format "yyyyMM") -quiet))

请注意!如果您更喜欢-not

,也会有效
if (!(Get-Content .\Process2Periods.xmla | Select-String ((Get-Date) | Get-Date -Format "yyyyMM") -quiet))

此外,上述行的(Get-Date) | Get-Date -Format "yyyyMM"部分是不必要的。你可以改为Get-Date -Format "yyyyMM"。见下文:

PS > (Get-Date) | Get-Date -Format "yyyyMM"
201502
PS > Get-Date -Format "yyyyMM"
201502
PS > 

答案 1 :(得分:1)

您的括号已关闭。

-quiet-ne参数被视为Select-String的参数。

我不确定您希望-quiet应用哪个命令(我希望Select-String),但您需要将整个Get-Content ... | Select-String ...位包裹在()中,然后再使用-ne "True"-ne $True(取决于您是否需要字符串或布尔值为真)。

if ((Get-Content .\Process2Periods.xmla | Select-String ((Get-Date) | Get-Date -Format "yyyyMM") -quiet) -ne $True)