昇格が必要なPowerShell関数を定義する方法は?


20

Linuxのsudo昇格コマンドに代わるものが見つからないため、次の質問があります。

昇格が必要なPowerShell関数を定義する方法は?私はUACプロンプトを意味します。

このような機能は次のとおりです。

function system-check {
    SFC /ScanNow
}

システム:

Windows 8.1 Pro 64ビット

パワーシェル:

Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  117

EDIT1:

100%理解できるように、言い換えてみましょう。

  1. PowerShellをユーザーとして実行しています
  2. 前述の機能を実行します system-check
  3. コマンドを実行できるように、関数を昇格させます。注、UACプロンプトを表示したい

多くのビルトインPowerShellコマンドやMicrosoftモジュールによって追加されたコマンド(MSOLコマンドなど)は多くの場合昇格を必要としますが、特権の昇格を支援するものではありません。それらは単に不可解なエラーメッセージで失敗します。スクリプトに昇格時のプロンプトを組み込むと、Microsoft自体よりもユーザーフレンドリーになります。
トッドウィルコックス

回答:


33

昇格されたウィンドウから特定のコマンドを実行するには:

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

ソース:昇格された権限で実行

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.