从Active Directory获取AD用户属性



我正在尝试筛选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(的用户。我想显示姓名和办公室。

您有一个语法问题

Where-Object的(位置隐含的(-FilterScript参数需要脚本块参数-{ ... }-而不是带括号的表达式((...)([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*"的东西,或者,对于区分大小写的匹配,使用-clike "*NICE*",正如Mathias R.Jessen所建议的那样

请注意,您也可以使用简化的语法,这消除了对脚本块的需要,并允许使用单独的参数(也请注意,没有$_.,这是隐含的(:

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

后退一步

Santiago Squarzon建议使用Get-ADUser-Filter-LDAPFilter参数在源处执行过滤,这比效率高得多;例如:

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

顺便说一句:有很多例子将脚本块语法与-Filter(-Filter { ... }(一起使用,但-Filter参数接受字符串,并且该字符串即使支持类似于的PowerShell-语法,也会由AD提供程序解释,因此最好先传递一个字符串-有关详细信息,请参阅此答案。


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

Select-Objectcmdlet用于从较大的对象或列表中仅选择所需的列

例如:

C:gitCore> gsv Spooler | fl
Name                : Spooler
DisplayName         : Print Spooler
Status              : Running
DependentServices   : {Fax}
ServicesDependedOn  : {RPCSS, http}
CanPauseAndContinue : False
CanShutdown         : False
CanStop             : True
ServiceType         : Win32OwnProcess, InteractiveProcess

GetService返回具有大量属性的服务对象。如果我只想要某些,我会这样使用:

C:gitCore> gsv Spooler | Select Name,Status
Name                : Spooler
Status              : Running

您正在使用cmdlet,可能会丢弃具有所需值的列。再次运行one-liner并删除Select-Objectcmdlet以查看所有可用列,直到找到属于Office的列为止。

相关内容

  • 没有找到相关文章

最新更新