2012-06-12 3 views
1

Powershell을 사용하여 java를 제거하는 데 msiexec 문제가 발생했습니다. 결과를 화면에 출력하고 배치 파일에 붙여 넣었습니다. 그러나 Powershell을 통해 실행될 때 "패키지를 찾을 수 없습니다"라는 메시지가 표시되지 않습니다. 누구든지 내가 잘못하고있는 것을 발견 할 수 있습니까? 난 위아래로 구글을 훑어 보았고 같은 결과를 얻었거나 성공한 명령을 실행하는 몇 가지 다른 방법을 시도했다.powershell을 사용하여 msiexec 프로그램을 제거하십시오.

cls 
$java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java*"} 
$msiexec = "c:\windows\system32\msiexec.exe"; 
#$msiexecargs = '/x:"$app.LocalPackage" /qr' 
$msiexecargs = '/uninstall "$app.IdentifyingNumber" /qr /norestart' 

if ($java -ne $null) 
{ 
    foreach ($app in $java) 
    { 
     write-host $app.LocalPackage 
     write-host $app.IdentifyingNumber 
     #&cmd /c "msiexec /uninstall $app.IdentifyingNumber /passive" 
     #Start-Process -FilePath $msiexec -Arg $msiexecargs -Wait -Passthru 
     [Diagnostics.Process]::Start($msiexec, $msiexecargs); 
    } 
} 
else { Write-Host "nothing to see here..." } 
Write-Host "check end" 

최종 목표는 Windows 7 로그온 스크립트를 사용하여 최종 사용자 시스템에서 모든 Java 버전을 제거한 다음 최신 버전을 설치하는 것입니다. 모든 Powershell을 만드는 것을 선호하지만이 작업을 수행 할 수없는 경우 제거 GUID로 하드 코딩 된 배치 파일을 사용합니다.

쓰기 호스트 문은 모두 디버깅 목적으로 사용됩니다. msiexec/x {GUID}/passive/norestart

오류 : "이 설치 패키지를 열 수 없습니다. 패키지가 존재하는지 확인하십시오. 액세스 할 수 있는지 또는 응용 프로그램 공급 업체에 연락하여 유효한 Windows Installer 패키지인지 확인하십시오. "

저는이 스크립트 자체가 아니라 단지이 스크립트에서 작동하지 않는다는 것을 알고 있습니다 ... 그래서 나는 그것이 구문 일이라고 생각하고 있습니다.

궁금한 점이 있으면 알려주십시오.

답변

0

먼저이 차이점을 알고 있습니다

"$app.IdentifyingNumber" 

을하고이

"$($app.IdentifyingNumber)" 

그래서 난 당신이 후자를 사용하고 싶었 생각 (코드 때문에 약간의 혼란 주석 행) :

&cmd /c "msiexec /uninstall $($app.IdentifyingNumber) /passive" 
+0

죄송합니다. 코드에서 시도한 다른 것들도 보여 드리고 싶습니다. 수정 한 내용에 대한 정보는 어디에서 얻을 수 있습니까? 이것은 아주 잘 작동했습니다. 감사! – grep65535

+0

http://blogs.msdn.com/b/powershell/archive/2006/07/15/variable-expansion-in-strings-and-herestrings.aspx가 좋은 출발이라고 생각합니다. 자세한 내용은 PowerShell in Action/PowerShell in Depth 등의 책이 필요합니다. – stej

관련 문제