我在文本文件中有以下帐户列表 -
AccountName
Mahin\user1
Mahin\user2
Mahin\group5
user12
usert1
groupt3
这样,我有大约400个帐户(各种用户和一些群组的混合),
正如您从上面所看到的,某些帐户的格式为<Domain>\<AccountName>
还有一些只有<AccountName>
。
我试图找到一种方法将用户和群组与此列表分开, 如何使用PowerShell实现这一目标?
寻找类似
的内容AccountName, IsUser, IsGroup, IsExists
Mahin\user1,1,0,1
Mahin\user2,1,0,1
Mahin\group5,0,1,1
user12,1,0,1
usert1,,,0 //-> This Account DOES NOT EXIST, so, IsUser, IsGroup and IsExists (0) can be empty or some distiguishable number
groupt3,,,0 //-> This Account DOES NOT EXIST, so, IsUser, IsGroup and IsExists (0) can be empty or some distiguishable number
到目前为止,我知道如何使用以下脚本获取各个组的成员,但不确定上述部分。
$groups = Get-Content "C:\AD\groups.txt"
$resultsarray =@()
foreach ($group in $groups) {
$resultsarray += Get-ADGroupMember -Id $group | select
samaccountname,name,@{Expression={$group};Label="Group Name"}
}
$resultsarray| Export-csv -path "C:\AD\output\GroupMembers.csv" -notypeinformation
答案 0 :(得分:2)
注意:我对Active Directory Cmdlets
不太熟悉,可能有更好的解决方案。
但是,我会首先检索所有用户和组,然后遍历您的文本文件并尝试查找任何用户或组:
$users = Get-ADUser -filter *
$groups = Get-ADGroup -filter *
Get-Content 'YOUR_FILE_PATH'| ForEach-Object {
$adObject = $_ -replace '(.*)\\(.*)', '$2@$1' # fix search string
if ($users | Where { $_.SamAccountName -eq $adObject -or
$_.UserPrincipalName -like "$adObject*"} )
{
[PSCustomObject]@{
AccountName = $_
IsUser = $true
IsGroup = $false
Exist = $true
}
}
elseif ($groups | Where Name -eq $adObject)
{
[PSCustomObject]@{
AccountName = $_
IsUser = $false
IsGroup = $true
Exist = $true
}
}
else
{
[PSCustomObject]@{
AccountName = $_
IsUser = $false
IsGroup = $false
Exist = $false
}
}
} | Export-csv -path "C:\output\GroupMembers.csv" -notypeinformation
在我的AD
上,我必须将Mahin\group5
转换为group5@Mahin
并搜索group5@Mahin*
,这就是为什么我会替换脚本中的字符串。