在不使用AD CmdLets的情况下从其他域检索用户组?

时间:2017-09-15 05:47:14

标签: powershell

我无法访问管理员权限,因此无法安装AD模块。

如何在不使用Active Directory的情况下在不同的域上检索用户的用户组?有任何想法吗?我可以访问其他域名,但我只能使用此脚本访问我自己域中的用户,但不能访问其他域名。

$filedirectory = "C:\Users\x\Desktop\z\Project\test.txt"
$outputdirectory = "C:\Users\x\Desktop\Project\Export.csv"
$allusernames = Get-Content $filedirectory
$groups = ""

$resultarray =@()

foreach ($allusernames in $allusernames) {

$groupObject = new-object PSObject

$currentusername = $allusernames
$groups = ([ADSISEARCHER]"samaccountname=$($currentusername)").Findone().Properties.memberof -replace '^CN=([^,]+).+$','$1' | out-string

$groupObject | add-member -MemberType NoteProperty -name "User" -Value $currentusername
$groupObject | Add-Member -MemberType NoteProperty -name "Groups" -Value $groups

$resultarray +=$groupObject

} 

$resultarray | export-csv -Path $outputdirectory -NoTypeInformation

2 个答案:

答案 0 :(得分:0)

您可以使用ADSI指定任何域并从中构建ADSIsearcher,如下所示:

$Searcher = New-Object System.DirectoryServices.DirectorySearcher([ADSI]"LDAP://$domain")

请注意,您还可以使用GC://查询全局编录,并使用[System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()动态获取当前林及其域。

由于您要查询群组成员资格,请注意群组成员资格是群组的属性,而不是用户。如果该组是本地域,则memberof属性仅显示同一域的域的组成员身份。

答案 1 :(得分:0)

$ForestName = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest().Name
$root = [ADSI]"GC://$ForestName"
$Searcher = [ADSISEARCHER]$root

这就是我使用的。