管理者としてPowerShellスクリプトを実行する方法


57

Windows 7デスクトップには、管理者特権が必要な(サービスを開始する)script.ps1があります。このスクリプトをクリックして、管理者権限で実行したいです。

これを達成する最も簡単な方法は何ですか?

回答:


48

デスクトップの追加アイコンを使用して、これを行う1つの方法を示します。デスクトップにアイコンを1つだけにしたい場合は、スクリプトを他の人に移動できると思います。

  1. デスクトップでPowershellスクリプトへのショートカットを作成します
  2. ショートカットを右クリックし、[ プロパティ ]をクリックします
  3. [ ショートカット ]タブをクリックします
  4. 詳細設定をクリックします
  5. 管理者として実行を選択します

これで、デスクトップ上の新しいショートカットをダブルクリックするだけで、昇格したスクリプトを実行できます。


36
これはpowershell -f
うまくいきましたが

2
@mousio-私もこれが必要でした、コメントを
ありがとう-m.edmondson

@mousioは、そのコマンドが機能する理由を教えてもらえますか?
シャヒーン14

7
@SShaheen- 管理者として実行を使用可能にするには、ショートカットが最初に指し示したドキュメントまたはスクリプトだけでなく、何らかの実行可能ファイル(powershell.exeなど)を指し示す必要があります。へのショートカットとscript.ps1同様に機能しますpowershell.exe -f script.ps1が、後者は管理者として実行するように設定できます(or スイッチのpowershell.exe /?説明を参照)-f-File
mousio 14

16

UAC対応システムでは、スクリプトが完全な管理者権限で実行されていることを確認するには、スクリプトの先頭に次のコードを追加します。

param([switch]$Elevated)

function Test-Admin {
  $currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
  $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}

if ((Test-Admin) -eq $false)  {
    if ($elevated) 
    {
        # tried to elevate, did not work, aborting
    } 
    else {
        Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
}

exit
}

'running with full privileges'

-elevatedスイッチを使用してスクリプトを実行すると、実行前に特権の昇格が試行されます。


スクリプトに引数パラメーターが必要な場合
キケネット14

これで完全な権限で実行されていると表示されても、管理者権限が不十分だというコードが表示される場合はどうなりますか?
mike.b93

@Kiquenetはそれをparam(...)一番上に追加し、直前-elevatedに転送します。ArgumentListおそらく、String[]フォームの使用方法を構築する方法について賢くする必要があります。
TWiStErRob

かなり気の利いた-ショートカットを作成するよりも良い
マイキー

13

同じPowershellを使用している場合、これを行うことができます:

Start-Process powershell -verb runas -ArgumentList "-file fullpathofthescript"

これの問題は、呼び出されたスクリプトの作業ディレクトリをに変更することC:\Windows\System32です。現在のディレクトリを保持する代替手段:stackoverflow.com/a/57033941/2441655
Venryx


1

PowerShell ISEは%windir%\ system32 \ WindowsPowerShell \ v1.0 \ PowerShell_ISE.exeにあります。それを右クリックして「管理者として実行」を選択し、そこからスクリプトを実行できます。

また、[Windowsロゴ]> [すべてのプログラム]> [アクセサリ]> [Windows PowerShell]で検索し、それらのショートカットで同じことを実行できます。



-1

これをスクリプトの先頭に追加します。

$currentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
$testadmin = $currentUser.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
if ($testadmin -eq $false) {
Start-Process powershell.exe -Verb RunAs -ArgumentList ('-noprofile -noexit -file "{0}" -elevated' -f ($myinvocation.MyCommand.Definition))
exit $LASTEXITCODE
}

これは、4年以上前のMDMoore313の回答のサブセットのようです。
スコット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.