我在尝试“修复”同事提供的 PS 脚本时遇到了问题,该脚本用于从客户 AD 中获取信息。我试图获取所有分发邮箱及其成员的列表。但他给我的脚本不起作用,我尝试更改一些,但由于我仍在学习 PowerShell,我发现自己陷入困境,真的不明白他的脚本在做什么。
Groups = Get-ADGroup -Filter * -SearchBase OU=costumer,OU=companies,DC=domene,DC=oss"
$Results = foreach( $Group in $Groups ){
Get-ADGroupMember -Identity $Group | foreach {
[pscustomobject]@{
GroupName = $Group.Name
Name = $_.Name
}
}
}
$Results| Export-Csv -Path c:\data\groups.csv -NoTypeInformation? -Encoding
unicode
当我运行这个脚本时,从一开始就出现错误,因为“Groups =”其中的 Groups 无法识别。
因此我将开头改为:
Get-ADGroup -filter * -Searchbase“OU=Distribution,OU=Groups,OU=Costumer,OU=Companies,DC=domene,DC=oss”
这是我想要的 AD 对象的完整路径,我已经测试了这个命令并获得了完整列表。但我没有获得有关组对象成员的信息。我尝试更改脚本的底部,但始终在“-identity”上返回错误,无论我在它后面写什么都没关系。
有人能帮我写一个更好的代码来获取我需要的信息吗?或者能解释一下这个脚本要做什么吗?
非常感谢您的帮助。
编辑1
谢谢你的帮助!我现在可以运行脚本并得到 .cvs 文件。但我想知道我是否还有其他问题。它应该返回 AD 中的组和组的成员,但我得到的结果不是这个。我附上了在 excel 中打开它的屏幕截图。
我的脚本中是否缺少其他内容来获取信息?
解决方案
我找到了一种方法来修改脚本,让它得到我需要的东西,而且它成功了。它可能不只是得到我需要的信息,但我得到了我需要的结果。:) 谢谢!
$GruppeMedlemmer = @()
$Groups = Get-ADGroup -Filter * -properties * -SearchBase "ou=felles,OU=Groups,OU=costumer,OU=Companies,DC=domene,DC=oss"
foreach ($g in $Groups) {
$members = $g | Get-ADGroupMember
foreach ($m in $members) {
$Info = New-Object psObject
$Info | add-member -MemberType NoteProperty -Name "GroupName" -Value $g.Name
$Info | add-member -MemberType NoteProperty -Name "Description" -Value $g.description
$Info | add-member -MemberType NoteProperty -Name "Member of" -Value $g.MemberOf
$Info | Add-Member -MemberType NoteProperty -Name "Member" -Value $m.name
$GruppeMedlemmer+= $Info
}
}
$GruppeMedlemmer | Sort-Object GroupName | Export-CSV C:\temp\groupdist.csv -notype -Encoding unicode
答案1
这应该有效:
$Groups = Get-ADGroup -Filter * -SearchBase "OU=dummy1,OU=dummy2,DC=dummy3,DC=dummy4"
$Results = foreach( $Group in $Groups ){
Get-ADGroupMember -Identity $Group | foreach {
[pscustomobject]@{
GroupName = $Group.Name
Name = $_.Name
}
}
}
$Results| Export-Csv -Path c:\data\groups.csv -NoTypeInformation -Encoding unicode
- 第 1 行缺少 $
- 第 1 行缺少“
- 第 13 行中的 ? 错了
- 'unicode' 需要与编码在同一行
确保目录C:\data
存在