【问题标题】:How to check for value in powershell cmdlet output? [duplicate]如何检查 powershell cmdlet 输出中的值? [复制]
【发布时间】:2022-03-04 03:51:24
【问题描述】:

请解释我如何检查DynamicPortRangeStartPort 值在get-nettcpsetting cmdlet 中的输出。

输出如下所示:

get-nettcpsetting | select DynamicPortRangeStartPort

DynamicPortRangeStartPort
-------------------------
                         
1024                     
1024                     
1024                     
1024                     
1024  

  

cmdlet 返回一个设置数组,我只想检查DynamicPortRangeStartPort 是否是任何返回项上的值1024

我不确定我错过了什么。

我试过了:

if ((get-nettcpsetting | Select DynamicPortRangeStartPort)[1] -eq 1024) { write-host "Yes" }
(get-nettcpsetting | select DynamicPortRangeStartPort) -contains "1024"
(get-nettcpsetting | select DynamicPortRangeStartPort) -in "1024"
(get-nettcpsetting | select DynamicPortRangeStartPort).Contains(1024)
(get-nettcpsetting | select DynamicPortRangeStartPort).Contains("1024")

原谅我的无知...

【问题讨论】:

  • Where-Object 是你的朋友 :) if(Get-NetTCPSetting |Where DynamicPortRangeStartPort -eq 1024){ ... }
  • 简而言之:Select-Object (select) 默认返回 a [pscustomobject] 实例,它具有 请求的属性 - 即使您' 只要求 single 属性。要仅获取该属性的,请改用-ExpandProperty <propertyName> - 有关详细信息和替代方法,请参阅linked answer

标签: powershell


【解决方案1】:

我发现Select DynamicPortRangeStartPort 返回的对象数组只有一个属性 (DynamicPortRangeStartPort)。

相反,我可以使用Select -ExpandProperty DynamicPortRangeStartPort 来生成值流,而不是具有属性的对象流。

if ((get-nettcpsetting | Select -Expandproperty DynamicPortRangeStartPort) -contains (1024)) { write-host "Yes" }

正如评论中提到的,Where-Object 也有效:

if(Get-NetTCPSetting | Where DynamicPortRangeStartPort -eq 1024){ Write-Host "Yes" }

【讨论】:

  • 鉴于它是一个数组,您可以使用其他运算符,如-eq-match 等,它应该可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 1970-01-01
相关资源
最近更新 更多