PowerShell中$UName变量无法传入Where-Object问题求助
问题分析与解决
首先,你用-Contains是错误的——这个运算符是用来检查集合是否包含指定元素,而非字符串模糊匹配,换回-like才是正确的选择。你的代码里$UName变量本身可以正常传入Where-Object脚本块,没输出结果大概率是以下原因导致:
排查步骤
先确认AD中存在同时满足
name包含输入值、company包含XYZ Corp的用户。可以单独运行这条命令,先检查符合公司条件的用户:Get-ADUser -Filter * -Properties Company | Where-Object {$_.Company -like "*XYZ Corp*"} | Select-Object Name, Company如果这步没有输出,说明要么公司名称不符合(比如实际是
XYZ Corporation、存在大小写差异,或者用了其他属性字段),要么根本没有符合公司条件的用户。确认
$UName的输入值正确,比如在Read-Host后加一行输出变量,检查是否有多余空格或输入错误:Write-Host "当前搜索关键词:'$UName'"
优化解决方案
直接把过滤条件放到Get-ADUser的-Filter参数里,让AD服务器直接返回符合条件的用户,效率比拉取所有用户到本地过滤高得多,也能避免潜在的变量作用域问题:
cls $UName = Read-Host -Prompt "Name or part of name to search" Write-Output "Searching for: $UName, please wait" Get-ADUser -Filter "Name -like '*$UName*' -and Company -like '*XYZ Corp*'" ` -Properties Title, Company, Country, MailNickname | Select-Object Name, Title, Company, Country, MailNickname Pause
注意:-Properties只需要指定你实际需要的属性,不用写*,减少不必要的数据传输。
内容的提问来源于stack exchange,提问作者user3499299
相关产品推荐
相关产品推荐

