【问题标题】:PowerShell Boolean ExpressionPowerShell 布尔表达式
【发布时间】:2015-02-18 21:08:21
【问题描述】:

我正在编写一个 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 语句中,因为我认为它不相关,但如果您想查看,请告诉我。

【问题讨论】:

    标签: windows powershell scripting boolean select-string


    【解决方案1】:

    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 > 
    

    【讨论】:

    • 你先生\女士是神。将在 6 分钟内检查此答案。非常感谢。
    • @powershelluser 想提一下(Get-Date) | Get-Date -Format "yyyyMM" 看起来是多余的,而Get-Date -Format "yyyyMM" 本身也可以工作。
    • @Matt - 我将其添加到我的回答中。我只有另一个版本,因为我从 OP 的代码中复制了它。
    • @Matt - 很好,谢谢马特。一件事,我尝试缩短以下行,但无法让它工作: $monthMinus1 = (Get-Date).AddMonths(-1) |获取日期 - 格式“yyyyMM”到 $monthMinus1 = (Get-Date).AddMonths(-1) -格式“yyyyMM”。你知道有没有办法解决这个问题?谢谢。
    • @powershelluser 如果您要进行日期操作,那么就保持原样。你在问题中的例子是多余的,但你评论中的例子需要你已经拥有的东西。不用管它。
    【解决方案2】:

    您的括号已关闭。

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

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

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

    【讨论】:

    • -quiet 用于选择字符串
    • @Matt 是的,在我写完那句话并查看了select-string 帮助后,我意识到这一点。谢谢。
    • iCodez 答案对我有用,而且他的答案似乎不那么复杂/更容易阅读。我很感激这个答案。谢谢。
    • @powershelluser 对于这种情况,它更直接,是的。不过,一般情况需要了解额外的分组。继续接受他的回答。
    猜你喜欢
    • 2010-09-21
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 2015-04-29
    • 2016-07-13
    相关资源
    最近更新 更多