无法访问powershell 2.0中的对象属性

时间:2015-04-28 16:41:12

标签: powershell

我在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;}

任何人都可以解释我需要做些什么才能访问这些属性吗?

1 个答案:

答案 0 :(得分:0)

好的,非常偶然,我找到了解决方案。事实上,有两个OU命名为我正在搜索的内容,它返回了一个对象数组。我不知何故错过了它在显示对象时返回2个结果的事实。

我能够通过简化搜索范围来解决问题,因此它只返回1个OU。

以下是更正后的代码:

true

我能够以这种方式限制我的搜索,因为我只需要让OU中的用户与这个OU位于同一个父OU中(你能说快5倍吗?)