Powershell查询代码

我在编写一些PowerShell代码时遇到问题。

我试图对Active Directory运行一个查询,它将把每个用户的所有组,成员,电子邮件地址和SID导出到一个CSV文件中。

它必须是recursion的,以便在组内search组。

十分感谢你的帮助! 我是新来的。

我目前的代码只显示特定组的名称:

Import-Module ActiveDirectory $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition $Group = Get-ADGroupMember -identity “Group distinguishedname” -Recursive $Group | get-aduser -Properties mail |select name,samaccountname,mail |export-csv -path $scriptPath\Members.csv -NoTypeInformation 

由于时间不够,我会这样回答:

你可以按照第一步把所有组合变成一个variables,类似于:

$Groups = Get-ADGroup ...

然后,以类似于以下的方式迭代$Groups对象:

 $Groups | Foreach-Object ` { $CurrentGroup = $_ $Members = Get-ADGroupMember -Identity $CurrentGroup ... # Build CSV string here with output from both # both $CurrentGroup and $Members # and additional data you might want to pull # Write CSV string to file here or add it to an array # to print to file after the looping. } 

希望能够推动你朝着一个可行的方向前进,我会看看你有多远,并帮助你,因为时间允许。

这样做的问题是你的结果不能保证是唯一的。 您可以也可能确实拥有多个组的成员。 如果发生这种情况,你会发现你的报告中有重复的条目。

另一个问题是,你最终会得到结果中的其他对象,如计算机和组。 可以将这些过滤出来。 总体而言,尝试在同一行显示当前组和用户信息相当复杂。

AD用户对象具有memberOf属性。 如果您只列出所有AD用户以及您之后的相关属性(包括memberOf属性),则您将获得更清晰的报告,并且生成速度会更快。

所以你的脚本看起来更像这样:

 # Only required if using Powershell 2.0 Import-Module Active Directory $scriptPath = split-path -parent $MyInvocation.MyCommand.Definition Get-ADUser -Filter * -Properties mail,memberOf | Select Name,SamAccountName,Mail,SID,memberOf | Export-CSV $script_path\members.tsv -NoTypeInformation -Delimiter "`t" 

这个解决scheme唯一的问题是,memberOf字段给出了组的DN(每个组都包含逗号,每个逗号也由逗号分隔),所以这是一个制表符定义的文档。 一旦您拥有TSV,您可以根据需要对其进行分类和过滤。

不是最好的解决scheme,但它会变得相当复杂,否则。 既然你是新手,最好尽量保持简单。

通过使用add-member cmdlet,我们保留了PsObject并添加了我们需要导出的组信息。 将数据保存在PsObject中可以轻松输出。

 $adGroups = Get-ADGroup -Filter * foreach ($grp in $adGroups){ Write-Host "Processing $($grp.DistinguishedName)" #get the memebers of the group $grpMembers = Get-ADGroupMember $grp | where {$_.ObjectClass -eq "user"} | select -ExpandProperty SamAccountName foreach ($member in $grpMembers){ #Get user information $user = get-aduser $member -Properties mail #Add group name and DN to the object Add-Member -InputObject $user -MemberType NoteProperty -Name Group -Value $grp.Name -Force Add-Member -InputObject $user -MemberType NoteProperty -Name GroupDn -Value $grp.DistinguishedName -Force #Output user to CSV $user | select name, samAccountName, SID, distinguishedName, Group, GroupDn | Export-Csv "c:\Windows\temp\groupMembership.csv" -NoTypeInformation -Append } } 

注意:这只输出用户对象