Get-ADUser中带变量的通配符

时间:2012-10-04 12:33:15

标签: powershell

我确定这只是一个语法错误,但我试图搜索AD用户,我无法弄清楚为什么这不起作用:

Write-Host "Enter LastName or UserName:"
$x = Read-Host
Get-ADUser -Filter { SAMAccountName -like '*$x*' } -Properties DispalyName | FT -Properties DisplayName

只是没有返回任何东西。我确定它是带有“*”的语法。但不知道为什么。谢谢你的帮助。

5 个答案:

答案 0 :(得分:8)

$ x未在Filter脚本块中展开,这应该可以完成工作:

$x = 'mini'
Get-ADUser -Filter "SamAccountName -like '*$x*'" -Properties DisplayName | ft DisplayName 

DisplayName
-----------
Administrator

或者,您可以使用ldap filter:

Get-ADUser -LDAPFilter "(samaccountname=*$x*)"

答案 1 :(得分:2)

我同意上述海报。单引号可防止变量扩展。 双引号将起作用。

PS H:\> $s = "smith"
PS H:\> Write-Host '*$s*' 
*$s*
PS H:\> Write-Host "*$s*" 
*smith*

在某些情况下,双引号无法保存您,例如用一个物体。

PS H:\> $psObj = New-Object PsCustomObject
PS H:\> $psobj | Add-Member -MemberType noteproperty -name s -value "smith"
PS H:\> Write-Host $psobj.s
smith
PS H:\> Write-Host "*$psobj.s*"
*@{s=smith}.s*

在这种情况下,请使用字符串格式:

PS H:\> Write-Host ("*{0}*" -f $psobj.s)
*smith*

答案 2 :(得分:1)

尝试改变这一点:

{ SAMAccountName -like "*$x*" }

编辑:

这应该有效:

$x = '*' + $(Read-Host 'Enter name') + '*'
get-aduser -Filter {name -like $x} -Properties DispalyName | FT -Properties DisplayName

答案 3 :(得分:0)

嗯,这很有效,但有点慢:

$x = Read-Host "Enter Name"

Get-ADUser -Filter * -Properties SAMAccountName | ? { $_.SAMAccountName -like "*$x*" } | Format-Table -Property SAMAccountName

有点不同的方法,但仍然有效!感谢所有的帮助。

答案 4 :(得分:0)

在使用对象时,我在PowerShell学习曲线中遇到了这个问题。

我读了一个用户ID的csv文件,需要对它们进行搜索/匹配/过滤,并且在双引号之前无法正常工作。

我的解决方案是在我的对象上使用ToString()方法并将其设置为标量变量,然后在过滤器中使用该变量。工作得很好。

$user_records=Import-CSV .\20140430.userids.csv

该表有三列“名称,ID,部门”。 为了在搜索过滤器中使用我用过的用户ID:

foreach ( $thisrow in $user_records ) {
$thisuser=$thisrow.Username.ToString()
Get-ADUser -Filter {SamAccountName -eq $thisuser} -SearchBase "OU=Domain Users,DC=topofthecharts,DC=com" -Properties Department 

}

这避免了我的扩张并完全引用了麻烦。