PowerShell"白色腰带"这里,第一次海报。我在这里时,我会尽量不降低这样一个乐于助人的社区的集体智商! :)我正在运行安装了Quest的PowerShell 3.0。
我的组织有一个Active Directory OU,其中包含几个控制VPN访问权限的安全组 - 这些是在我们命名约定之前的几天创建的(呃!)
我宁愿不依赖这些名字,而是让我成为X和Y以及Z"而是说"让我成为OU XXX"代替。
理想情况下,我也喜欢最后的计数,因为最终这是用于审核"有多少用户拥有VPN访问权限" (虽然我可以将结果发送到.CSV或其他东西,如果那太复杂了)
所以我有一些可以做到这一点的部分,我只是无法想象如何将它们整合在一起。任何帮助,将不胜感激。以下是我的动作部分:
返回一个特定组中的用户:
get-adgroupmember "group_of_coolness" -recursive | Select name
使用" searchbase"
从用户填写的OU返回结果Get-ADUser -Filter * -SearchBase 'ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org' -Properties GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname |
select GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname | Out-GridView
返回几个特定组的结果,但也给出了一个计数(到目前为止我最高级的补丁工作^^):
$GroupMembers=(get-ADGroup -filter {(Name -eq "XXXX") -or (Name -eq "YYYY")} |
get-adgroupmember -Recursive | select distinguishedname -Unique)
$Users=foreach ($user in $GroupMembers.distinguishedname) {
Get-ADUser $user
}
$Users | Sort-Object DistinguishedName |
select name, DistinguishedName
Write-Host
Write-Host "Total Users = " $Users.count
最后的代码片段似乎最接近我,如果我可以替换" name -eq XXXX或YYYY"与" -searchbase" ou = XXX ..."
你认为聪明人是什么 - 我是否接近答案?再次,感谢任何建议,让我知道如果我是一个杰克屁股,并忽略了已经回答的线程(我发现了一些接近的电话,但没有任何相当的价钱)。
我很高兴看到我在这里失踪的东西:)
答案 0 :(得分:1)
查找特定 OU 中所有已停用的用户:
$ExportFile="C:\TempInf\Inaktiv.txt"
Get-ADGroup -Filter{Name -eq "OU Name"}
$OUpath = 'OU=OU Name,OU=OU Parent,DC=WWW,DC=ORGANIZATION,DC=COUNTRY'
$uf = @{Expression={$_.samAccountName};Label="samAccountName";width=30}, `
@{Expression={$_.GivenName};Label="GivenName";width=50}, `
@{Expression={$_.whenChanged};Label="whenChanged";width=20}, `
@{Expression={$_.Description};Label="Description";width=50}, `
@{Expression={$_.DistinguishedName};Label="DistinguishedName";width=250}
Get-ADUser -Filter {Enabled -eq $false} -SearchBase $OUpath -Properties samAccountName, GivenName, whenChanged, DistinguishedName, Description |
Format-Table $uf |
Out-File -FilePath $ExportFile -Width 400
答案 1 :(得分:0)
你可以很容易地简化这个:
$Users = Get-ADGroup -SearchBase 'ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org' -Filter * `
| Get-ADGroupMember -Recursive `
| Select-Object -Unique `
| Sort-Object DistinguishedName;
$Users | Select-Object Name, DistinguishedName;
Write-Output ("Total Users = {0}" -f $Users.Count);
如果您想按群组名称进行搜索,可以将第一行更改为Get-ADGroup -Filter {(Name -eq "Group A") -or (Name -eq "Group B")}
,就像您使用的那样。
您的示例中没有使用除名称和专有名称之外的任何内容,因此没有理由再次通过Get-ADUser运行它并从服务器获取与您相同的数据。没理由浪费DC的时间。
如果你做需要获得名称和专有名称之外的其他属性,那么你需要这样做。你可以这样做:
$Users = Get-ADGroup -SearchBase 'ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org' -Filter * `
| Get-ADGroupMember -Recursive `
| Select-Object -Unique `
| ForEach-Object { Get-ADUser $_ -Properties GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname; } `
| Sort-Object DistinguishedName;