$groups = 'group1', 'group2'....
ユーザーが特定のADグループに属しているかどうかを確認し、そうでない場合はグループ名をエコーする必要があります。パイプラインで実行できますか?
私はたくさんグーグルして何も見つけることができません、多分私は英語でグーグル検索が苦手です:)。
$groups |
Get-QADGroupMember |
Get-QADUser -SamAccountName 'lalala' | ForEach-Object {
if ($_.SamAccountName -ne $null) {
Write-Host "ok"
} else {
Write-Host 'not ok'
}
}
表示方法:not ok. user is not in
group_name
?
問題は、結果のループ処理が非常に簡単なのに、なぜパイプラインを使用するのかということです。
ユーザーがグループのリストのメンバーかどうかを確認するには:
$user = "TestUsername"
$groups = 'Domain Users', 'Domain Admins'
foreach ($group in $groups) {
$members = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SamAccountName
If ($members -contains $user) {
Write-Host "$user is a member of $group"
} Else {
Write-Host "$user is not a member of $group"
}
}
そして複数のユーザーのために:
$users = "TestUsername1", "TestUsername2", "TestUsername3"
$groups = 'Domain Users', 'Domain Admins'
foreach ($user in $users) {
foreach ($group in $groups) {
$members = Get-ADGroupMember -Identity $group -Recursive | Select -ExpandProperty SamAccountName
If ($members -contains $user) {
Write-Host "$user is a member of $group"
} Else {
Write-Host "$user is not a member of $group"
}
}
}
サーバーにActive Directory PowerShell機能がインストールされていない場合は、この方法を使用できます。ここでは、ドメイングループがサーバーのローカル管理者グループの一部であるかどうかを確認していますが、GroupPrincipal
をUserPrincipal
に変更して、ユーザー名を指定するだけで、ユーザーはグループに属しています。また、グループがドメイングループの場合は、$domainContext
両方のFindByIdentity
呼び出し。
function Test-DomainGroupIsMemberOfLocalAdministrators([string] $domainName, [string] $domainGroupName)
{
Add-Type -AssemblyName 'System.DirectoryServices.AccountManagement'
$domainContext = [System.DirectoryServices.AccountManagement.PrincipalContext]::new([System.DirectoryServices.AccountManagement.ContextType]::Domain, $domainName)
$localMachineContext = [System.DirectoryServices.AccountManagement.PrincipalContext]::new([System.DirectoryServices.AccountManagement.ContextType]::Machine)
$domainGroup = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($domainContext, $domainGroupName)
$localAdministratorsGroup = [System.DirectoryServices.AccountManagement.GroupPrincipal]::FindByIdentity($localMachineContext, "Administrators")
if($domainGroup -ne $null)
{
if ($domainGroup.IsMemberOf($localAdministratorsGroup))
{
return $true
}
}
return $false
}