从 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 个对象被过滤,因此没有输出。
我正在尝试过滤 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 个对象被过滤,因此没有输出。