奇妙な問題があります。特定の要素を昇格されたユーザーとして実行する必要があるいくつかのスクリプト (ログイン スクリプトなど) があります。
(背景を説明するために、UACを使用して、ユーザーがパスワードを入力せずに実行されるのを防ぎます。ユーザーの介入なしで実行したいルーチンの昇格されたタスクについては、基本的にコマンドライン入力を次のように実行する小さな.Netアプリを作成しました昇格したユーザー。)
これは何年にもわたってうまく機能しています。現在、Windows 7 64 ビットでテストしていますが、このプロセスは機能しません。プロセスをテストするために、次の小さなスクリプトを作成しました。
if ( $args[0].Length -eq 0) {
$message = "No input passed"
} else {
$message = $args[0]
}
$a = new-object -comobject wscript.shell
$b = $a.popup($message)
これは、ユーザー入力が渡されたメッセージ ボックスをポップアップ表示するだけです。
試験結果:
1) 新しいプロセスを作成して呼び出す
([wmiclass]"win32_Process").create('powershell c:\users\me\desktop\testArgs.ps1 "hello"')
結果: これは期待どおりに機能します - ボックスに「こんにちは」と表示されます
2) .net Elevation ユーティリティを使用して (引数を指定して) 呼び出す
([wmiclass]"win32_Process").create('C:\swtools\elevator.exe powershell c:\users\me\desktop\testArgs.ps1')
結果: Powershell ウィンドウは管理者として開かれますが (タイトル バーに示されているように)、ウィンドウが開いたときにカーソルが点滅してハングします。ポップアップは表示されません。(Win7 32 ビット マシンでは、これは期待どおりに機能します。「こんにちは」ポップアップが表示されます)。
3) Elevation ユーティリティから powershell (引数なし) を呼び出す
([wmiclass]"win32_Process").create('C:\swtools\elevator.exe powershell')
これは期待どおりに機能します - 昇格した PowerShell ウィンドウが開きます。
当初、これにより、エレベーターユーティリティとそれが引数を渡す方法に何か問題があると思いました。ただし、次のように、別のアプリを正常に呼び出すことができます。
4) Elevation ユーティリティからメモ帳 (引数付き) を呼び出す
([wmiclass]"win32_Process").create('C:\swtools\elevator.exe powershell notepad.exe "c:\users\me\desktop\testArgs.ps1"')
これにより、メモ帳 (管理者が所有するプロセス) のインスタンスが開き、スクリプトの内容が表示されます。
基本的に個々の部分は期待通りに機能しているように見えますが、3 つを合わせると機能しません。(私が言うように、これはすべて Win7 32 ビットで動作します。)