我在Windows 7 x64计算机上使用powershell v2.0和ActiveDirectory模块来获取特定的OU,然后让用户使用它们来执行某些操作。它在以下函数之外工作正常:
$ou = Get-ADOrganizationalUnit -Filter * | Where {$_.Name -eq "<ou name>"}
Get-ADUser -Filter * | where {$_.DistinguishedName -like "*" + $ou.DistinguishedName} | sort SamAccountName | foreach{ Get-IMSGroup $_.SamAccountName} | ft -AutoSize
然而,我希望通过将其包装在一个函数中来使这更容易。将它放入这样的功能之后就不再有效了。
function Display-ImsUsersGroups([String]$OuName)
{
$ou = Get-ADOrganizationalUnit -Filter * | Where {$_.Name -eq $OuName}
Get-ADUser -Filter * | where {$_.DistinguishedName -like "*" + $ou.DistinguishedName} | sort SamAccountName | foreach{ Get-IMSGroup $_.SamAccountName} | ft -AutoSize
}
事实证明,实际问题是虽然$ ou被初始化为正确的OU,但我无法访问成员,例如,$ou.DistinguishedName
不返回任何内容,$ou.Name
也没有。
我找到this SO question,但是当我运行$ou | Get-Member
时,我得到以下输出:
TypeName: Microsoft.ActiveDirectory.Management.ADOrganizationalUnit
Name MemberType Definition
---- ---------- ----------
Contains Method bool Contains(string propertyName)
Equals Method bool Equals(System.Object obj)
GetEnumerator Method System.Collections.IDictionaryEnumerator GetEnumer...
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Item ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropertyVal...
City Property System.String City {get;set;}
Country Property System.String Country {get;set;}
DistinguishedName Property System.String DistinguishedName {get;set;}
LinkedGroupPolicyObjects Property Microsoft.ActiveDirectory.Management.ADPropertyVal...
ManagedBy Property System.String ManagedBy {get;set;}
Name Property System.String Name {get;}
ObjectClass Property System.String ObjectClass {get;set;}
ObjectGUID Property System.Nullable`1[[System.Guid, mscorlib, Version=...
PostalCode Property System.String PostalCode {get;set;}
State Property System.String State {get;set;}
StreetAddress Property System.String StreetAddress {get;set;}
任何人都可以解释我需要做些什么才能访问这些属性吗?
答案 0 :(得分:0)
好的,非常偶然,我找到了解决方案。事实上,有两个OU命名为我正在搜索的内容,它返回了一个对象数组。我不知何故错过了它在显示对象时返回2个结果的事实。
我能够通过简化搜索范围来解决问题,因此它只返回1个OU。
以下是更正后的代码:
true
我能够以这种方式限制我的搜索,因为我只需要让OU中的用户与这个OU位于同一个父OU中(你能说快5倍吗?)