私は決して PowerShell の専門家ではありません。これをグーグルでよく調べましたが、答えが見つかりませんでした。
このスクリプトの基本的な考え方は、コマンド ライン引数を指定して appcert.exe という Microsoft ツールを実行することです。appcert.exe は 0、1、または -1 を返します。でチェックしてい$lastexitcode
ます。
appcert.exe は Windows 7 と Windows 8 でのみ実行されるため、両方でスクリプトを実行しました。
Windows 7x64 (PS バージョン = 2.0) ではすべて正常に動作します。同じ手順をすべて手動で実行できます。同じ PS ウィンドウに appcert.exe の出力が表示されます。
PS バージョン = 3.0、CLRVersion = 4.0.30319.17929 の Windows 8x64 (RTM) では別の話です。
場合によっては、appcert.exe が "インライン" で実行されます (Win7 の場合と同様)。それ以外の場合は、コマンド ウィンドウが起動され、appcert.exe の出力が飛んで、コマンド ウィンドウが閉じます。それを呼び出した PS ウィンドウはチェックできません$lastexitcode
(ちなみに、これはまったく設定されていません)。
マシンですべての PS バージョンを試しましたが、結果は次のとおりです。
次の場合、appcert.exe は別のウィンドウで起動されます。
- PowerGUI 3.2.0.2237 (PS 2.0 を使用)
- 通常の PowerShell (非管理者)
- Windows PowerShell ISE (管理者以外)
appcert.exe は、次の場合にインラインで起動されます。
- 管理者としてPowershellを実行しました
- 管理者として ISE を実行
上記の動作は、次の場合に取得されます。
- 次のように appcert コマンドを呼び出すスクリプトを起動します。
& $CertToolPath
- ツールのホーム ディレクトリに移動し、.\appcert.exe と入力します。
- これを実行します:
Cmd /c appcert.exe
- これを実行します:
Invoke-expression –command appcert.exe
- これを実行します:
[system.diagnostics.process]::start("appcert.exe")
私の同僚も同様にこれに困惑しています。
私のマシンは、ワークグループではなく、テスト ドメインにあります。テスト ドメインの管理者としてマシンにログインするので、理論的には、私は既に管理者になっています。
その管理者として MS ツールもインストールします。実際、私はマシンのローカル管理者として何もしません。何か案は?:)
よろしくお願いします、 タニア