-1

次の Powershell スクリプトを使用しています。前半(アンインストール)は問題なく動作します。後半 (インストール) は、ユーザー入力を許可した場合にのみ機能します。誰でも助けてもらえますか?スクリプトは次のとおりです:(書式設定が不十分で申し訳ありません)

#uninstall
$java = Get-WmiObject -Class win32_product | where { $_.Name -like "*Java*"}
$msiexec = "C:\Windows\system32\msiexec.exe";
$msiexecargs = '/x "$($app.IdentifyingNumber)" /qn /norestart'

if ($java -ne $null)
{
    foreach ($app in $java)
    {
        write-host $app.LocalPackage
        write-host $app.IdentifyingNumber
        C:\Windows\system32\cmd.exe /c "C:\Windows\system32\msiexec.exe /x $($app.IdentifyingNumber) /qn"
        Start-Process -FilePath $msiexec -Arg $msiexecargs -Wait -Passthru
        [Diagnostics.Process]::Start($msiexec, $msiexecargs);
    }
}
if ($java -ne $null)
{
    foreach ($app in $java)

{
        write-host $app.LocalPackage
        write-host $app.IdentifyingNumber

C:\Windows\system32\cmd.exe /c 

"C:\Windows\system32\msiexec.exe /x $($app.IdentifyingNumber) /qn"

        Start-Process -FilePath $msiexec -Arg $msiexecargs -Wait -Passthru
        [Diagnostics.Process]::Start($msiexec, $msiexecargs);
    }
}

function Get-ScriptDirectory{
    $Invocation = (Get-Variable MyInvocation -Scope 1).Value

try {
        Split-Path $Invocation.MyCommand.Path -ea 0
    }

catch {
    Write-Warning 'You need to call this function from within a saved script.'
    }
}

function Get-Architecture{
    return $(gwmi win32_operatingsystem).OSArchitecture
}


$Path = Get-ScriptDirectory

#Close all instances of IE, Firefox, & Chrome
Get-Process | where {$_.ProcessName -match "iexplore"} | Stop-Process -Force
Get-Process | where {$_.ProcessName -match "chrome"} | Stop-Process -Force
Get-Process | where {$_.ProcessName -match "firefox"} | Stop-Process -Force

#Install
Start-Process -FilePath "msiexec.exe" -ArgumentList "/i "C:\temp\jre1.7.0_17.msi" ""/log "c:\temp\javainst.log " -Credential $cred -wait

#Also Install the 64-bit JRE if on a 64 workstation

if(Get-Architecture -match "64")
{
    $cred = Get-Credential
    Start-Process -FilePath "msiexec.exe" -ArgumentList "/i "C:\temp\jre1.7.0_17 (x64).msi" ""/log c:\temp\javainst.log " -Credential $cred -wait
}

#Import reg keys to disable auto updating
reg import "C:\temp\JavaUpdate.reg"{ 
    }
4

1 に答える 1

1
#uninstall everything Java
Get-WmiObject -Class win32_product | ? {$_.Name -like "*Java*"} | % {msiexec /x "$($_.IdentifyingNumber)" /qn | Out-Null}
#The Out-Null waits for the command to finish

#If you have made a Java MSI use this
msiexec /i $pathtomsi /qn

#If you only have the exe you'll need to look up the Command Line Interface (CLI) for Java
$cmd = "$pathtoexe /s"
cmd /c $cmd

スクリプトについては、 #Install 行を次のように変更します。

Start-Process -FilePath 'msiexec.exe' -ArgumentList '/i "C:\temp\jre1.7.0_17.msi" /log "c:\temp\javainst.log" /qn' -Credential $cred -wait

ほとんどの一重引用符を使用するベスト プラクティス

于 2013-03-13T00:42:30.780 に答える