トップ回答者
GPOで実行したPowerShellがうまく動作しない

質問
-
ローカル上で下記のPowerShellスクリプトを管理者権限で実行することで、Javaを削除することが出来ました。
==============Script==============
$comName = $Env:COMPUTERNAME
$logPath = "\\install_path\" + $comName + ".log"
Start-Transcript -Path $logPath
$Java = gwmi win32_product -filter "name like 'Java%'"
If ($Java -ne $null) {
$Java.Uninstall()
}
Stop-Transcript==============Script==============
これを自動化したいと考え、GPOのスタートアップスクリプトに設定したところ、下記エラーにてJavaを削除することが出来ませんでした。
GPOでの実行が正常に行われないのはどこに問題があるのでしょうか。
====================エラーログ====================
[System.Object[]] に 'Uninstall' という名前のメソッドが含まれないため、メソッドの呼び出しに失敗しました。
発生場所 \\Domain名\Policies\{GPOアドレス}\Machine\Scripts\Shutdown\JavaUninstall.ps1:8 文字:24
+ $Java.Uninstall <<<< ()
+ CategoryInfo : InvalidOperation: (Uninstall:String) []、RuntimeException
+ FullyQualifiedErrorId : MethodNotFound**********************
====================エラーログ====================
回答
-
$Java = gwmi win32_product -filter "name like 'Java%'"
の行で、"Java"から始まるプログラム名が複数あるため、$Java変数に配列が格納されている可能性があると思います。
([System.Object[]] というのは配列のことです)
Javaで始まる名前のプログラムを一括削除して問題ないのならば、foreachでループを回し、その中で各要素にUnInstall()メソッドを実行すれば良いかと思います。
ただいずれにせよ、プログラム名指定がちょっと乱暴すぎるように思いますので、アンインストールすべきプログラム名をリスト化し、それに合致した場合に削除する等の処理を検討してみてはいかがでしょうか。
- 回答としてマーク UltraKatan 2014年4月18日 8:08
すべての返信
-
$Java = gwmi win32_product -filter "name like 'Java%'"
の行で、"Java"から始まるプログラム名が複数あるため、$Java変数に配列が格納されている可能性があると思います。
([System.Object[]] というのは配列のことです)
Javaで始まる名前のプログラムを一括削除して問題ないのならば、foreachでループを回し、その中で各要素にUnInstall()メソッドを実行すれば良いかと思います。
ただいずれにせよ、プログラム名指定がちょっと乱暴すぎるように思いますので、アンインストールすべきプログラム名をリスト化し、それに合致した場合に削除する等の処理を検討してみてはいかがでしょうか。
- 回答としてマーク UltraKatan 2014年4月18日 8:08