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

PowerShell 7中Get-ADUser -Filter无法使用变量的问题

解决PowerShell 7中Get-ADUser过滤器无法使用变量的问题

问题原因

  1. 自动变量冲突:$Input是PowerShell内置的自动变量,专门用于接收管道输入的对象集合。PowerShell 7对自动变量的使用检查更严格,非管道场景下引用会触发"未定义"错误;而PowerShell 5.1的AD模块对过滤器变量解析逻辑较宽松,允许这种非标准用法。
  2. 过滤器字符串解析差异:AD模块的-Filter参数在单引号字符串中时,PowerShell不会展开变量。PowerShell 5.1的AD模块可能额外解析了单引号内的变量,而PowerShell 7的AD模块不再支持该行为。

解决方案

方案1:使用脚本块格式的过滤器(推荐)

脚本块格式是PowerShell 3.0+官方推荐的用法,能自动处理变量传递,无需担心引号或转义问题:

# 替换为自定义变量名,避免使用自动变量$Input
$targetSamAccount = "你的目标账号名"
Get-ADUser -server $DC -Filter {sAMAccountName -eq $targetSamAccount} -Properties $sProperties | Select $sProperties

方案2:使用双引号字符串并正确转义变量

如果偏好字符串格式的过滤器,需用双引号包裹,并转义$符号(让AD模块识别变量名):

$targetSamAccount = "你的目标账号名"
Get-ADUser -server $DC -Filter "sAMAccountName -eq `$targetSamAccount" -Properties $sProperties | Select $sProperties

方案3:直接拼接过滤器字符串

将变量值直接拼入过滤器字符串,让AD模块直接解析最终表达式:

$targetSamAccount = "你的目标账号名"
$filterExpr = "sAMAccountName -eq '$targetSamAccount'"
Get-ADUser -server $DC -Filter $filterExpr -Properties $sProperties | Select $sProperties

关键注意事项

  • 永远避免在非管道场景下使用$Input自动变量,改用自定义变量名,避免冲突。
  • 脚本块格式的过滤器兼容性更好,能减少因PowerShell版本或AD模块更新导致的语法问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:05:31