👩⚖️
[PowerShell]ログインユーザーがAdministratorsに所属しているか判定するFunction
Windows環境でグループに所属しているユーザーの一覧を確認可能なコマンドレットは、「Get-LocalGroupMember」です。
実際に実行すると……
Get-LocalGroupMemberのコマンド結果
PS C:\Users\"ログインユーザー名"> Get-LocalGroupMember -Name 'Administrators'
ObjectClass Name PrincipalSource
----------- ---- ---------------
ユーザー "コンピューター名"\Administrator Local
ユーザー "コンピューター名"\"ログインユーザー名" Local
PS C:\Users\"ログインユーザー名">
このような結果。
今回は、このコマンドレットを使って、現在ログインしているユーザーが管理者グループ(Administrators)に所属しているか、
Bool(True/False)で判定できるFunctionを自作してみました。
この記事のターゲット
- PowerShellユーザーの方
- 下記条件の自作Functionを確認したい方
- 対象はログインユーザー、もしくは任意のユーザーを指定
- 主に対象ユーザーが Administratorsグループ、もしくは任意のグループに所属しているか確認可能
- グループに所属していれば
True。所属していない場合はFalseを返す
対象ユーザーが指定のグループに所属しているかBoolで判定するFunction
自作したFuncitonの引数の初期値は、
対象ユーザーが「現在のログインユーザー($($env:COMPUTERNAME)\$($env:USERNAME))」となり、
対象グループは「管理者グループ(Administrators)」となっています。
要件に応じて変更してください。
では、実際に作成したFunctionは下記の通り。
対象ユーザーが指定のグループに所属しているかBoolで判定するFunction
function Test-GroupMembership {
param (
# 初期値は、現在のコンピューター名とユーザー名を設定
[System.String]$targetUser = "$($env:COMPUTERNAME)\$($env:USERNAME)",
# 初期値は、Administrators
[System.String]$targetGroup = 'Administrators'
)
# 指定のグループに所属するユーザーの一覧を取得
$groupMembers = (Get-LocalGroupMember -Name $targetGroup)
# 対象ユーザーが指定のグループに含まれているか判定
$isMember = ($groupMembers.Name -contains $targetUser)
return $isMember
}
実際に実行した結果
実行結果1/2:引数無しの初期値で動作検証した結果
事前にAdministratorsグループに所属するユーザーを確認
PS C:\Users\"ユーザー名"> Get-LocalGroupMember -Name Administrators
ObjectClass Name PrincipalSource
----------- ---- ---------------
ユーザー "コンピューター名"\Administrator Local
ユーザー "コンピューター名"\"ユーザー名" Local
PS C:\Users\"ユーザー名">
コマンドのコピー用
コピー用
if (Test-GroupMembership) {
Write-Output "現在のユーザー「$($env:USERNAME)」は Administrators グループに所属しています。"
} else {
Write-Output "現在のユーザー「$($env:USERNAME)」は Administrators グループに所属していません。"
}
引数無しの初期値で動作検証した結果
PS C:\Users\"ユーザー名"> if (Test-GroupMembership) {
>> Write-Output "現在のユーザー「$($env:USERNAME)」は Administrators グループに所属しています。"
>> } else {
>> Write-Output "現在のユーザー「$($env:USERNAME)」は Administrators グループに所属していません。"
>> }
現在のユーザー「"ユーザー名"」は Administrators グループに所属しています。
PS C:\Users\"ユーザー名">
実行結果2/2:ユーザー名とグループ名それぞれ指定して動作検証した結果
事前にUsersグループに所属するユーザーを確認
PS C:\Users\"ユーザー名"> Get-LocalGroupMember -Name Users
ObjectClass Name PrincipalSource
----------- ---- ---------------
グループ NT AUTHORITY\Authenticated Users Unknown
グループ NT AUTHORITY\INTERACTIVE Unknown
ユーザー "コンピューター名"\"ユーザー名" Local
PS C:\Users\"ユーザー名">
コマンドのコピー用
コピー用
$userName = 'HOMEPC\Ichitaro'
$targetGroup = 'Users'
if (Test-GroupMembership $userName) {
Write-Output "現在のユーザー「$userName」は $targetGroup グループに所属しています。"
} else {
Write-Output "現在のユーザー「$userName」は $targetGroup グループに所属していません。"
}
任意のユーザー名・グループ名で動作検証した結果
PS C:\Users\"ユーザー名"> $userName = 'HOMEPC\Ichitaro'
>> $targetGroup = 'Users'
>> if (Test-GroupMembership $userName) {
>> Write-Output "現在のユーザー「$userName」は $targetGroup グループに所属しています。"
>> } else {
>> Write-Output "現在のユーザー「$userName」は $targetGroup グループに所属していません。"
>> }
現在のユーザー「HOMEPC\Ichitaro」は Users グループに所属していません。
PS C:\Users\"ユーザー名">
まとめ
-
Windowsのグループに所属するユーザーを確認するコマンドレットは「
Get-LocalGroupMember」 -
自作Function「
Test-GroupMembership」は下記2点の機能を実現!- 現在のログインユーザーが管理者グループに所属しているかBoolで判定可能
- 引数の指定により判定するユーザーとグループの変更が可能
という感じです。
もう少し機能を肉付けすると
ローカルユーザー限定で判定するためにコンピューター名を除いた形式に変更。
判定するグループ名の存在チェックを事前に実施する。
というのが打倒ですかね。ぜひ、個人の要件にあわせて変更してみてください 🤖
関連記事
Discussion