我确定这只是一个语法错误,但我试图搜索 AD 用户,但我无法弄清楚为什么这不起作用:
Write-Host "Enter LastName or UserName:"
$x = Read-Host
Get-ADUser -Filter { SAMAccountName -like '*$x*' } -Properties DispalyName | FT -Properties DisplayName
只是不返回任何东西。我确定它是带有“*”的语法。但不知道为什么。谢谢你的帮助。
我确定这只是一个语法错误,但我试图搜索 AD 用户,但我无法弄清楚为什么这不起作用:
Write-Host "Enter LastName or UserName:"
$x = Read-Host
Get-ADUser -Filter { SAMAccountName -like '*$x*' } -Properties DispalyName | FT -Properties DisplayName
只是不返回任何东西。我确定它是带有“*”的语法。但不知道为什么。谢谢你的帮助。
$x 没有在过滤器脚本块内展开,这应该可以完成工作:
$x = 'mini'
Get-ADUser -Filter "SamAccountName -like '*$x*'" -Properties DisplayName | ft DisplayName
DisplayName
-----------
Administrator
或者,您可以使用 ldap 过滤器:
Get-ADUser -LDAPFilter "(samaccountname=*$x*)"
我同意上面的海报。单引号防止变量扩展。双引号将起作用。
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*
尝试改变这个:
{ SAMAccountName -like "*$x*" }
编辑:
这应该有效:
$x = '*' + $(Read-Host 'Enter name') + '*'
get-aduser -Filter {name -like $x} -Properties DispalyName | FT -Properties DisplayName
好吧,这行得通,只是有点慢:
$x = Read-Host "Enter Name"
Get-ADUser -Filter * -Properties SAMAccountName | ? { $_.SAMAccountName -like "*$x*" } | Format-Table -Property SAMAccountName
有点不同的方法,但工作不少!感谢所有的帮助。
在使用对象时,我在我的 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
}
这完全避免了我的扩展和引用的麻烦。