我无法在脚本中添加Get-ADUser
属性。
当前,.csv文件中显示的唯一列是:Domain
,Group
和Username
。
我的目标是为组中的每个用户获取更多信息。
我要显示的输出是:Domain
,Group
,Username
,Display Name
,Description
,Phone number
和Email
下面是我的脚本:
$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
}
}
答案 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>