考虑以下代码片段
$User = @{Username = "fred.bloggs"}
$Username = $User.Username
Get-AdUser -Filter {SamAccountName -eq $Username} # this works
Get-AdUser -Filter {SamAccountName -eq $User.Username} # this throws an error
第一个 Get-User 有效,但第二个失败:
Get-AdUser : Property: 'Username' not found in object of type: 'System.Collections.Hashtable'.
我知道 PowerShell 对对象和从左到右解析的解析怪癖,通常会将其包装在 $($User.Username) 中,但这也不起作用。
我知道答案很简单!
最佳答案
由于 -Filter
正在寻找 System.String
,因此您可以通过使用双引号而不是脚本 block 来解决解析问题:
Get-ADUser -Filter "SamAccountName -eq '$($User.Username)'"
Get-ADUser
会将传递给 -Filter
的任何脚本 block 转换为字符串以进行评估,因此首先使用字符串会很有帮助。
关于powershell - 在 Get-AdUser 中使用哈希表变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26468002/