比较选择字符串通过管道传递的结果与字符串

时间:2019-01-27 12:59:10

标签: powershell

我想将类似Select-String结果的grep与字符串进行比较,并返回布尔值true或false,但是当我将所有内容都放入if / else表达式中时,我无法匹配正确的语法。

我得到的错误输出是:

  

在线:1个字符:102   + ...对象{$ _ |找到Select-String 1程序包。})-找到了eq 1个程序包。)...   + ~~~~~~~~~表达式或语句中出现意外的标记“包”。在第1行   字符:102   + ...对象{$ _ |找到Select-String 1程序包。})-找到了eq 1个程序包。)...   + ~~~~~~~~~在'if'语句中的表达式后缺少结尾')'。在第1行   字符:117   + ... $ _ |找到Select-String 1程序包。})-找到了eq 1个程序包。){echo ...   +〜表达式或语句中的意外标记')'。在线:1个字符:184   + ... rometheus-wmi-exporter已安装,正在跳过。 }其他{c:/ pr ...   + ~~~~表达式或语句中出现意外的标记“ else”。       + CategoryInfo:ParserError:(:) [],ParentContainsErrorRecordException       + FullyQualifiedErrorId:UnexpectedToken

如果我运行第一个表达式的内容,则会得到预期的结果,但是当我将它放入if的表​​达式部分时,我无法返回布尔值true或false。

powershell -NoProfile -ExecutionPolicy unrestricted -Command --% "if ((choco list prometheus-wmi-exporter | Where-Object {$_ | Select-String "1 packages found."}) -eq "1 packages found.") { echo "prometheus-wmi-ex
porter is already installed, skipping." } else { c:/programdata/chocolatey/bin/choco.exe install --force -y prometheus-wmi-exporter.install }"

我的最终目标是,如果我得到一个匹配项以返回true,否则返回false并执行false语句。

2 个答案:

答案 0 :(得分:0)

尝试这样重写:

array(3) {
  [0]=>
  int(33)
  [1]=>
  int(55)
  [2]=>
  int(70)
}

答案 1 :(得分:0)

  1. 您的命令不会检查您的期望,而只是重新调谐是否存在这样的程序包,
    如果已安装-local
  2. ,则不会
  3. 该问题被标记为[powershell],但是您调用了powershell?应该从批处理运行吗?如果是这样,为什么不只使用clist.exe(choco list的快捷方式)并检查一下?
clist -local|find /i "prometheus-wmi-exporter" &&(echo installed)||(echo not installed)
  1. 该命令过于复杂,如果使用带-(not)match检查的choco输出,就足够了。
if((clist -local) -match 'prometheus-wmi-exporter'){"installed"}else{"not installed"}
  1. 在包装命令之前,直接对其进行测试