我正在学习 powershell,并希望查询几个 AD 组并确定用户是否是 AD 组的成员。
- 第 1 部分:查询具有 10 个嵌套 AD 组的 AD 组
- 第二部分:查询用户的AD组并拉出列表
- 第 3 部分:未发布,但比较第 1 部分和第 2 部分的输出
在网上搜索,发现了一些山雀和比特。我知道 Active Directory 模块,但请避免使用它,因为此脚本将由非技术用户执行,并且避免为此安装 RSAT。
我有 Powershell 版本 2 和 Windows 7
第1部分
group1 是具有 10 个嵌套 AD 组的 AD 组。
Write-Host "Fetching information from groups.Please wait.."
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain
$group=[System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity ($ct,'group1')
$group1 = $group.GetMembers | Where {$_.StructuralObjectClass -eq "group"} | Select SamAccountName
$group1 = $group1 -replace("=", " ") -replace("{", " ") -replace("@", " ") -replace ("}", " ") -replace("SamAccountname", " ") -replace '\s+', ' '
$ADGroups = foreach ($l in group1) {$l.trim()}
确保AD组信息被程序获取或退出脚本
if (($ADgroups | out-string) -like $null) {
Write-Host "Unable to fetch AD groups information" -foreground "red"
Start-sleep 10
break
}
第2部分
可以写入文件的临时位置
$location = "C:\AD"
$ct = [System.DirectoryServices.AccountManagement.ContextType]::Domain
$user = [System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($ct, $username)
If ($user -like $null) {
Write-host "User does not exist in AD" -foreground "magenta"
start-sleep 10
break
}
Write-Host "Please wait...Looking user group membership..."
$usergroups = $user.GetGroups()
删除文件(如果存在)。
Remove-Item $location\useradgroups.txt
$usergroups | select SamAccountName | Out-File $location\useradgroups.txt -append
$testr = gc $location\useradgroups.txt
if (($testr | out-string) -like $null) {
Write-Host "Unable to fetch user AD groups information" -foreground "red"
Start-sleep 10
Remove-Item $location\useradgroups.txt
break
}
$useradgroups = foreach ($l in $testr ) {$l.trim()}
$useradgroups | Select-String -Pattern "\w" | out-file $location\useradgroups.txt
$useradgroups = gc $location\useradgroups.txt
问题:
除非我修剪输出,否则无法比较它。所以只好编写如上图所示的脚本:
- 避免将输出写入文本文件
-replace("=", " ") -replace("{", " ")
在第 1 部分中避免- 简化代码。
Powershell 大师的任何建议都将受到欢迎。这将有助于我的学习过程