
Linuxに代わるものが見つからないのでsudo
標高コマンドに関して、次の質問があります:
昇格を必要とする PowerShell 関数を定義するにはどうすればいいでしょうか? つまり、UAC プロンプトです。
たとえば、次のような関数があります。
function system-check {
SFC /ScanNow
}
システム:
Windows 8.1 Pro 64ビット
パワーシェル:
Major Minor Build Revision ----- ----- ----- -------- 5 0 10586 117
編集1:
100%理解しやすいように言い換えましょう:
- PowerShellをユーザーとして実行する
- 前述の機能を実行する
system-check
- コマンドを実行できるように関数を昇格させたいのですが、UACプロンプトが表示されるようにしたいことに注意してください。
答え1
管理者特権のウィンドウから特定のコマンドを実行するには:
Start-Process -FilePath powershell.exe -ArgumentList {$ScriptBlock} -verb RunAs
例えば:
Start-Process -FilePath powershell.exe -ArgumentList {
SFC /scannow
} -verb RunAs
管理者特権のウィンドウから特定のスクリプトを実行するには:
Start-Process powershell -ArgumentList '-noprofile -file MyScript.ps1' -verb RunAs
UAC のプロンプトを表示して PowerShell セッション全体を実行するには:
Start-Process powershell.exe -Verb runAs
現在のウィンドウが昇格された権限で実行されている場合に $True または $False を返す関数:
function isadmin
{
#Returns true/false
([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
}
スクリプトが管理者としてのみ実行されるようにするには、先頭に以下を追加します。
If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
{
Echo "This script needs to be run As Admin"
Break
}
PowerShell v4.0 では、#Requires ステートメントを使用することで上記を簡略化できます。
#Requires -RunAsAdministrator
ソース:権限を昇格して実行する