1

ここのスレッドで、ユーザーが管理者権限を持っているかどうかを確認する方法を見つけました。ただし、これにブール論理を使用しようとすると、機能しません。

$user = [Security.Principal.WindowsIdentity]::GetCurrent();
(New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)  

if($user = $false){cls;Write-warning "Starting and stopping services can only be done with administrative privileges.`nPlease restart this script from an elevated prompt!";Read-host;exit
}

問題は、Powershell を管理者権限で起動せずにコンピューターからスクリプトを実行しているときに、「False」というテキストが表示されることです。ただし、if ステートメントは機能しません。定義が間違っていますか?

編集: ifステートメントの$true代わりに使用する$falseと、昇格したプロンプトからスクリプトを実行する場合と実行しない場合の両方で開始されます。

4

2 に答える 2

6

あなたの状態には2つの問題があります$user = $false

  1. そもそも条件ではない。=比較演算子ではなく、代入演算子です。-eq等しいかどうかを確認する必要があります。
  2. $userブール値ではありません。ここで実際に確認したいのは、IsInRole()メソッドの戻り値です。ただし、変数に割り当てることはないため、コードの他の場所で使用することはできません。

コードを次のように変更します。

$user    = [Security.Principal.WindowsIdentity]::GetCurrent()
$isAdmin = (New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)

if (-not $isAdmin) {
  cls
  Write-warning "Starting and stopping services can ..."
  Read-host
  exit
}

そして問題は消えます。

于 2013-09-07T16:10:16.333 に答える
0

私には不思議に思えます..以下を更新して同じチェックを行うことはできませんか:

if !($isAdmin) {
  cls
  Write-warning "Starting and stopping services can ..."
  Read-host
  exit
}
于 2013-09-08T22:21:08.207 に答える