无法在我的AD Powershell脚本中添加Get-ADuser属性

时间:2018-08-02 16:53:15

标签: powershell active-directory

我无法在脚本中添加Get-ADUser属性。 当前,.csv文件中显示的唯一列是:DomainGroupUsername。 我的目标是为组中的每个用户获取更多信息。 我要显示的输出是:DomainGroupUsernameDisplay NameDescriptionPhone numberEmail

下面是我的脚本:

$groups = Get-Content c:\temp\ADGroups.txt
$domains = (Get-ADForest).domains
foreach ($Group in $Groups) {
    $Members = foreach ($domain in $domains) {
        $Groupname = Get-ADGroup -Filter { Name -like $Group } -Server $Domain
        $Groupname |
            Get-ADGroupMember -Server $domain |
            Select @{Name="Domain";Expression={$Domain}},
                @{Name="Group";Expression={$Groupname.Name}}, Name |
            Export-Csv c:\temp\GroupsInfo.CSV -NoTypeInformation -Append
    }
}

1 个答案:

答案 0 :(得分:0)

使用您拥有的内容,将其更改为此并尝试一下...

$Groups =  (Get-Content -Path 'c:\temp\ADGroups.txt')
$Domains = (Get-ADForest).Domains

foreach($Group in $Groups)
{
    $Members = foreach ($domain in $domains) 
    {
        Get-ADGroupMember -Server $domain -Identity $Group | 
        Select -Property @{Name="Domain";Expression={$Domain}},
        @{Name="Group";Expression={$Group}},Name
    } 
    $Members
}

已更新,可运行结果

PS C:\Scripts> $Groups =  'Administrators','Guests' #(Get-Content -Path 'c:\temp\ADGroups.txt')
$Domains = (Get-ADForest).Domains

foreach($Group in $Groups)
{
    $Members = foreach ($domain in $domains) 
    {
        Get-ADGroupMember -Server $domain -Identity $Group | 
        Select -Property @{Name="Domain";Expression={$Domain}},
        @{Name="Group";Expression={$Group}},Name
    } 
    $Members
}

# Results 

Domain          Group           Name
------          -----           ----
contoso.com   Administrators  Domain Admins
contoso.com   Administrators  Enterprise Admins
contoso.com   Administrators  Administrator
contoso.com   Guests          Domain Guests
contoso.com   Guests          Guest

相同的结果也会显示在导出上。

$Members | Export-Csv c:\temp\GroupsInfo.CSV -NoTypeInformation -Append
psedit c:\temp\GroupsInfo.CSV

"Domain","Group","Name"
"contoso.com","Administrators","Domain Admins"
"contoso.com","Administrators","Enterprise Admins"
"contoso.com","Administrators","Administrator"
"contoso.com","Guests","Domain Guests"
"contoso.com","Guests","Guest"

我还想补充一点,您无法获得这些属性...

显示名称,描述,电话号码和电子邮件。

...从当前代码中获取。

您将从Get-ADUser cmdlet获取。因此,您必须添加该细分。

根据OP请求进行了更新

$Groups =  'Administrators','Guests' #(Get-Content -Path 'c:\temp\ADGroups.txt')
$Domains = (Get-ADForest).Domains

foreach($Group in $Groups)
{
    $Members = foreach ($domain in $domains) 
    {
        $MemberInfo = Get-ADGroupMember -Server $domain -Identity $Group

        ForEach($Member in ($MemberInfo | where objectClass -eq 'user'))
        {
            Get-ADUser -Identity $Member.SamAccountName -Properties * | 
            Select @{Name="Domain";Expression={$Domain}},
            @{Name="Group";Expression={$Group}},
            SamAccountName,DisplayName,Description,OfficePhone,EmailAddress
        }
    } 
    $Members # | Export-Csv c:\temp\GroupsInfo.CSV -NoTypeInformation -Append
}

# Results


Domain         : contoso.com
Group          : Administrators
SamAccountName : Administrator
DisplayName    : Administrator
Description    : Built-in account for administering the computer/domain
OfficePhone    : 
EmailAddress   : Administrator@contoso.com

Domain         : contoso.com
Group          : Guests
SamAccountName : Guest
DisplayName    : 
Description    : Built-in account for guest access to the computer/domain
OfficePhone    : 
EmailAddress   : 

根据OP问题进行更新

至此...

  

我知道它有很多要求,但是它有什么方法可以工作   嵌套组?

就我所知,目前,这是这些cmdlet的局限性。因此,没有任何固有的方式(例如参数或开关)来获取嵌套或间接组。您必须自己处理代码。再次,至少目前如此。

例如,在用例的这一部分中做类似的事情可能是一种方法...

function Get-NestedGroupMember
{
    [cmdletbinding()]

    [Alias('gngm')]

    param
    (
        [Parameter(Mandatory,ValueFromPipeline)]
        [string]$Identity
    )

    process
    {
        $user = Get-ADUser -Identity $Identity
        $userdn = $user.DistinguishedName
        $strFilter = "(member:1.2.840.113556.1.4.1941:=$userdn)"
        Get-ADGroup -LDAPFilter $strFilter -ResultPageSize 1000
    }
}

在PS上总是有多种处理方法,这只是其中一种。

Get-NestedGroupMember -Identity 'SomeUserName' |
Select-Object -Property Name, DistinguishedName

您甚至可以利用这种方法来做一些事情,与我们到目前为止所介绍的有所不同,因为它可以访问与用户相关联的所有对象,并且您可以根据需要解析这些属性/参数/属性。 / p>