я написал сценарий деинсталлировать Java из Windows 7 машин:РЕШИТЬ: Powershell: Msiexec/X бросает ошибку 1619, когда вызов из сценария
[...]
$p2=start-process "msiexec.exe" -arg "/X $uninstall32 /qn REMOVE=ALL /norestart " -PassThru -wait -verb runAs
$p2.WaitForExit()
[...]
где, как $uninstall32 = {26A24AE4-039D-4CA4-87B4-2F03217065FF}
, если я называю этот PS1 файл как администратор напрямую, все пошло хорошо. В порядке обновления процесса я должен вызвать мой (рабочий) файл ps1 из файла .bat
. это звонит мой ps1
файл таким образом
if exist "%programfiles%\java\jre7" (
powershell.exe -NoProfile -Command "Set-ExecutionPolicy Bypass"
powershell.exe -NoProfile -file %~dp0uninstalljava7.ps1
powershell.exe -NoProfile -Command "Set-ExecutionPolicy "restricted"
)
затем erythin идут неправильно: Msiexec бросает 1619?
Я не понимаю?
EDIT:
а, для меня рабочего раствора:
Set-StrictMode -Version 2
$uninstall32key = "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall"
$uninstall64key = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$hklm32 = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry32)
$hklm64 = [Microsoft.Win32.RegistryKey]::OpenBaseKey([Microsoft.Win32.RegistryHive]::LocalMachine, [Microsoft.Win32.RegistryView]::Registry64)
$key32 = $hklm32.OpenSubKey($uninstall32key)
$key64 = $hklm64.OpenSubKey($uninstall64key)
$subkeys32 = $key32.GetSubKeyNames()
$subkeys64 = $key64.GetSubKeyNames()
foreach($subkey in $subkeys32)
{
$key = $hklm32.OpenSubKey($uninstall32key+"\\"+$subkey)
$displayName = $key.GetValue("DisplayName")
if ($displayName -match "Java 7")
{
$uninstall32 =$key.GetValue("UninstallString")
if ($uninstall32) {
$uninstall32 = $uninstall32 -Replace "msiexec.exe","" -Replace "/I","" -Replace "/X",""
$params = @{
"FilePath" = "$Env:SystemRoot\system32\msiexec.exe"
"ArgumentList" = @(
"/x"
$uninstall32
"/qn"
"REMOVE=ALL"
"/norestart"
)
"Verb" = "runas"
"PassThru" = $true
}
$app1 = start-process @params
$app1.WaitForExit()
}
}
}
foreach($subkey in $subkeys64)
{
$key = $hklm64.OpenSubKey($uninstall64key+"\\"+$subkey)
$displayName = $key.GetValue("DisplayName")
if ($displayName -match "Java 7")
{
$uninstall64 =$key.GetValue("UninstallString")
if ($uninstall64) {
$uninstall64 = $uninstall64 -Replace "msiexec.exe","" -Replace "/I","" -Replace "/X",""
$params = @{
"FilePath" = "$Env:SystemRoot\system32\msiexec.exe"
"ArgumentList" = @(
"/x"
$uninstall64
"/qn"
"REMOVE=ALL"
"/norestart"
)
"Verb" = "runas"
"PassThru" = $true
}
$app1 = start-process @params
$app1.WaitForExit()
}
}
}
Спасибо за все предложения.
это означает, что файл или пакет не доступен или действительным для установки, если вы используете только Powershell скрипт для тестового пути просто использовать 'Test-path' и для сценария запуска' Powershell -noexit "&" "путь к сценарию" " – powershell
powershell -noexit" & "" путь к скрипту "" ", не помогает -> 1619 –
Как в стороне, [PowerShell.exe имеет ExecutionPolicy] (https: // technet .microsoft.com/en-us/library/hh847736.aspx) для сеанса, поэтому вам не нужно менять его ширину машины, а затем менять ее. –