You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中使用-contains检测数组内指定字符串失败求助

问题描述

我编写了如下PowerShell代码:

$Packets = @()

$Packets += Test-PXESever -ProcessorArchitecture 0 -Verbose

$Packets += Test-PXESever -ProcessorArchitecture 7 -Verbose

数组$Packets的输出内容如下:

Op          : BootResponse
HType       : Ethernet
HLen        : 6
Hops        : 0
XID         : E72347EB
Secs        : 0
Flags       : {Broadcast}
CIAddr      : 0.0.0.0
SIAddr      : 10.164.28.3
SName       : 
File        : 


Op          : BootResponse
HType       : Ethernet
HLen        : 6
Hops        : 0
XID         : E72347EB
Secs        : 0
Flags       : {Broadcast}
CIAddr      : 10.164.28.74
SIAddr      : 164.3.15.61
File        : smsboot\Ps02\x86\pxe.com

我需要检查$Packets数组中是否包含字符串smsboot和164.3.15.61,从输出来看确实存在,但使用以下代码检测时始终返回“不包含”:

if($Packets -contains "smsboot"){
Write-Host "Contains smsboot"}
else {Write-Host "Does not contain smsboot"}

针对IP地址的检测也是同样情况,请问我哪里操作错误了?

问题原因与解决方法

错误原因

-contains运算符在PowerShell中是检测数组是否存在完全匹配的元素,但你的$Packets数组里的元素是自定义对象(不是字符串),每个对象包含Op、SIAddr、File等属性,直接拿字符串和数组对象对比自然不匹配。

解决方法

需要针对对象的具体属性做检测:

  1. 检测smsboot(对应File属性)
    可以直接提取所有对象的File属性,用-match做模糊匹配:
if ($Packets.File -match "smsboot") {
    Write-Host "Contains smsboot"
}
else {
    Write-Host "Does not contain smsboot"
}

或者更严谨地遍历过滤:

$hasSmsboot = $Packets | Where-Object { $_.File -like "*smsboot*" } | Select-Object -First 1
if ($hasSmsboot) {
    Write-Host "Contains smsboot"
}
else {
    Write-Host "Does not contain smsboot"
}
  1. 检测164.3.15.61(对应SIAddr属性)
    提取所有对象的SIAddr属性后,用-contains做精确匹配:
if ($Packets.SIAddr -contains "164.3.15.61") {
    Write-Host "Contains 164.3.15.61"
}
else {
    Write-Host "Does not contain 164.3.15.61"
}

如果需要模糊匹配IP(比如匹配网段),同样用-match:

if ($Packets.SIAddr -match "164\.3") {
    Write-Host "Contains IP in 164.3 segment"
}

内容的提问来源于stack exchange,提问作者user18209625

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 15:17:33