如何在filter参数中使用变量?

时间:2013-08-15 18:36:44

标签: powershell-v3.0

我正在尝试从bitlocker活动目录对象中提取一些属性,我可以使用PowerShell并输入所有信息来完成。例如

Get-ADObject -filter 'CN -like "*A3F850A4*"' `
             -Properties CanonicalName,msFVE-RecoveryPassword

工作得很好拉动属性,但我无法弄清楚如何在-filter参数中使用变量并让它返回任何信息,这是我尝试过的代码。

[string]$passwordId = Read-Host `
                  "What is the first 8 charcters of the recovery password id?"
Get-ADObject -filter {CN -like $passwordId} ` 
             -Properties CanonicalName,msFVE-RecoveryPassword

非常感谢任何帮助,特别是有关在脚本中使用变量的任何信息。感谢。

2 个答案:

答案 0 :(得分:2)

AD cmdlet过滤器实际上并不像通常的PowerShell语法那样。

我建议使用-LdapFilter代替它(它对其他工具更具可移植性,并且通常与PowerShell-ish过滤器没有太大区别):

Get-ADObject -LdapFilter "(cn=*$passwordId*)"

如果您坚持使用-Filter:只需确保您首先获得正确的字符串:

$likePattern = "*$passwordId*"
Get-ADObject -Filter {cn -like $likePattern}

或者使用字符串表示法(带一些额外的引号)代替:

Get-ADObject -Filter "cn -like '*$passwordId*'"

但是再次说明:这些过滤器在MS AD模块之外不起作用,LDAP过滤器可用于我见过的用于搜索AD的每个工具(包括用于AD的ADSISearcher和Quest cmdlet)。

答案 1 :(得分:0)

是的,但是对于“ -LDAPFilter'(anr = variable)':

$user = Read-Host -Prompt "What user or email?
Get-ADUser -LdapFilter '(anr=$user)' -Properties * |Select SamAccountName, Mail, CanonicalName