我现在遇到的问题是,当我通过PowerShell运行代码时,它会更改卸载字符串的值,并在前面添加变量名。我希望的结果是这样的。
MsiExec.exe /X{2C5B24AD-9F13-52A1-KA2N-8K4A41DC9L4G}但是,在用/X替换/I并执行.Trim()之后,我从变量中得到的结果如下:
@{UninstallString=/X{2C5B24AD-9F13-52A1-KA2N-8K4A41DC9L4G}}所以我想知道你们能不能从我下面的代码中告诉我我哪里错了。
我必须用/X替换/I,因为卸载字符串首先像这样返回MsiExec.exe /I{2C5B24AD-9F13-52A1-KA2N-8K4A41DC9L4G},而我正在尝试卸载,而不是安装。
if ($Uninstall_str) {
#run uninstall here
try {
$Uninstall_str = $Uninstall_str -replace 'MsiExec.exe /I', '/X'
$Uninstall_str = $Uninstall_str.Trim()
Start-Process "msiexec.exe" -Arg "$Uninstall_str /qb" -Wait
} catch {
Write-Output $_.Exception.Message
Write-Output $_.Exception.ItemName
Write-Warning "Error unintalling."
}
}发布于 2019-07-10 21:28:21
从注册表读取UninstallString值时,您没有展开该值。执行此操作的代码可能如下所示:
$Uninstall_str = Get-ItemProperty 'HKLM:\...\Uninstall\Something' |
Select-Object UninstallString将其替换为
$Uninstall_str = Get-ItemProperty 'HKLM:\...\Uninstall\Something' |
Select-Object -Expand UninstallString这样问题就会消失。
发布于 2019-07-10 21:40:03
为了去掉@{uninstallstring,我需要做的就是指定我在该行上修剪的内容
$Uninstall_str = $Uninstall_str.Trim()因此,这一行更改为以下代码,以接收我想要的结果。
$Uninstall_str = $Uninstall_str.Trim("@{UninstallString=")https://stackoverflow.com/questions/56971577
复制相似问题