回答:
[bool](([System.Security.Principal.WindowsIdentity]::GetCurrent()).groups -match "S-1-5-32-544")
これが何をするかを分解する:
[bool]
-最終結果をにキャストしbool
ます。[System.Security.Principal.WindowsIdentity]::GetCurrent()
- WindowsIdentity
現在実行中のユーザーのを取得します。(...).groups
-IDのgroups
プロパティにアクセスして、IDがメンバーであるユーザーグループを確認します。-match "S-1-5-32-544"
かどうかを確認するためにgroups
含まれている既知のSIDのAdministratorsグループのを「管理者として実行」を使用した場合、アイデンティティはそれだけが含まれます。-match
タイプキャスティングを使用する代わりに:[Security.Principal.WindowsIdentity]::GetCurrent().Groups -contains 'S-1-5-32-544'
([Security.Principal.WindowsPrincipal] `
[Security.Principal.WindowsIdentity]::GetCurrent() `
).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
これにより、現在のWindows IDが取得され、現在のIDに管理者の役割がある(つまり、昇格されている場合)Trueが返されます。
PowerShellの4.0では、あなたは使用することができる必要があり、あなたのスクリプトの先頭に:
#Requires -RunAsAdministrator
出力:
スクリプト「MyScript.ps1」は、管理者として実行するための「#requires」ステートメントが含まれているため、実行できません。現在のWindows PowerShellセッションは管理者として実行されていません。[管理者として実行]オプションを使用してWindows PowerShellを起動し、スクリプトを再度実行してください。
return
ユーザーが管理者でない場合は可能です:)
#Requires -RunAsAdministrator
が便利な理由です。昇格していない場合、スクリプト全体が実行されないようにします。