👩‍⚖️

[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を確認したい方
    1. 対象はログインユーザー、もしくは任意のユーザーを指定
    2. 主に対象ユーザーが Administratorsグループ、もしくは任意のグループに所属しているか確認可能
    3. グループに所属していれば 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点の機能を実現!

    1. 現在のログインユーザーが管理者グループに所属しているかBoolで判定可能
    2. 引数の指定により判定するユーザーとグループの変更が可能

という感じです。

もう少し機能を肉付けすると
ローカルユーザー限定で判定するためにコンピューター名を除いた形式に変更。
判定するグループ名の存在チェックを事前に実施する。

というのが打倒ですかね。ぜひ、個人の要件にあわせて変更してみてください 🤖

関連記事

https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960
https://zenn.dev/haretokidoki/articles/fb6830f9155de5

GitHubで編集を提案

Discussion