从 Active Directory 获取 AD 用户属性

Get AD user properties from Active Directory

我正在尝试过滤 Active Directory 中 属性 的值。

我试过了:

 Get-ADUser -filter * -Properties physicalDeliveryOfficeName | Where-Object (($_.physicalDeliveryOfficeName -like "NICE")) | Select-Object physicalDeliveryOfficeName, name 

Get-ADUser -filter * -Properties physicalDeliveryOfficeName | Select-Object physicalDeliveryOfficeName, name | Where-Object (($_.physicalDeliveryOfficeName -like "NICE"))

我没有收到任何错误,但也没有结果。

我用 physicaldeliverofficename 搜索了所有用户是 (myvalue)。我想显示姓名和办公室。

Select-Object cmdlet 用于select只有您想要的来自较大对象或列表的列

例如:

 C:\git\Core> gsv Spooler | fl

Name                : Spooler
DisplayName         : Print Spooler
Status              : Running
DependentServices   : {Fax}
ServicesDependedOn  : {RPCSS, http}
CanPauseAndContinue : False
CanShutdown         : False
CanStop             : True
ServiceType         : Win32OwnProcess, InteractiveProcess

Get-Service returns 具有很多属性的服务对象。如果我只想要某些,我会这样使用它:

 C:\git\Core> gsv Spooler | Select Name,Status

Name                : Spooler
Status              : Running

您正在使用 cmdlet,并且可能丢弃了具有您需要的值的列。 运行 再次使用您的一行并删除 Select-Object cmdlet 以查看所有可用的列,直到找到与 Office 相关的列。

您有一个语法问题:

Where-Object's (positionally implied) -FilterScript parameter expects a script block 参数 - { ... } - 不是 括号表达式 ((...)).[1]

因此:

# Note the { ... } around the expression passed to Where-Object
Get-ADUser -Filter * -Properties physicalDeliveryOfficeName | 
  Where-Object { $_.physicalDeliveryOfficeName -eq "NICE" } # | ...

注意:由于 "NICE" 文字 字符串而不是 通配符模式 ,我'我们使用 -eq 而不是 -like 运算符。如果您确实需要查找 "NICE" 作为子字符串 ,请使用 -like "*NICE*" 之类的东西,或者对于 case-sensitive 匹配, -clike "*NICE*", 正如 Mathias R. Jessen 所建议的那样。

请注意,您也可以使用 simplified syntax,这样就不需要脚本块并允许使用单独的参数(另请注意没有 $_.,这是隐含的):

Get-ADUser -Filter * -Properties physicalDeliveryOfficeName | 
  Where-Object physicalDeliveryOfficeName -eq "NICE" # | ...

退一步:

Santiago Squarzon suggests performing the filtering at the source, by using Get-ADUser-Filter-LDAPFilter参数效率更高;例如:

Get-ADUser -Filter 'physicalDeliveryOfficeName -eq "NICE"'

顺便说一句:有许多示例使用脚本块语法 -Filter (-Filter { ... }),但是 -Filter 参数接受 string 和该字符串,即使它支持 PowerShell-like 语法,也会被 AD 提供程序解释,因此最好传递一个字符串作为开头 - 请参阅 this answer 了解更多信息。


[1] 如果您使用 (...),则表达式的值改为绑定到 -Property 参数,因此被解释为 属性 name 其值 - 假设这样的 属性 甚至存在 - 被解释为布尔值,用于确定是否应过滤手头的输入对象。如果表达式未计算为输入对象上存在的 属性 的名称,则隐含 $false,并且输入对象被过滤 out。在您的情况下,这可以预见地导致 no 个对象被过滤,因此没有输出。