PowerShell中.Contains始终返回False的问题排查求助
问题原因与解决办法
问题根源
你用$Test = cmd.exe /c 'net user B02201R /domain'得到的$Test是字符串数组(Object[]),数组里的每个元素对应net user输出的一行文本。而Contains方法是用来判断数组中是否存在完全等于目标值的元素——但INet-User只是数组某一行里的子字符串,不是整个元素,所以$Test.Contains('INet-User')必然返回False。
解决办法
给你几个实用的处理方式:
方式一:用PowerShell的
-match操作符
直接检查数组中是否有包含目标子串的元素,返回布尔值:[bool]($Test -match 'INet-User')-match会自动遍历数组,只要有任意一行包含INet-User就会返回对应的行,用[bool]转成布尔结果。方式二:合并数组为单个字符串后用
Contains
把数组的所有行拼接成一个大字符串,再检查子串是否存在:($Test -join "`n").Contains('INet-User')"n"`是换行符,保证拼接后的文本和原输出格式一致。方式三:用PowerShell原生AD命令(更可靠)
避免解析cmd输出的麻烦,直接用ActiveDirectory模块查询用户组:# 需先导入AD模块,适合域环境 Import-Module ActiveDirectory $userGroups = Get-ADUser B02201R -Properties MemberOf | Select-Object -ExpandProperty MemberOf $userGroups -match 'INet-User'这种方式不需要处理文本格式,结果更准确。
内容的提问来源于stack exchange,提问作者J0nsan
相关产品推荐
相关产品推荐

