【发布时间】:2026-02-20 13:00:01
【问题描述】:
我遇到了一个有趣的情况,即安装了代理并与服务器进行通信。此代理现已停产,并且未续订与供应商的支持。我们的许多代理不再与服务器进行通信,因为它一直在回调我们的服务器已停用的 DMZ 网络。代理有密码防篡改,老管理员不知道密码。
我发现我们可以做的是在这些服务器上,再次安装代理,然后我们内部网络上的设备将密码更改为任何密码,就我而言,我做了空白。
更糟糕的是,代理安装在Program Files、Program Files (x86) 中,在某些情况下,它会在同一台服务器上安装两次。
这就是我正在尝试开发的脚本的背景。我的想法是从设备下载代理,检测架构并运行安装,然后运行卸载并为每个Program Files 和/或Program Files(x86) 循环它。我让它工作正常,但它没有从 x86 目录中删除应用程序。另外,我希望能获得一些格式提示。
if ((Get-WmiObject Win32_OperatingSystem).OSArchitecture -eq "64-bit") {
# Download Application
$source = "http://heartrate0001/x64/HeartRate.exe"
$filename = [System.IO.Path]::GetFileName($source)
$destination = "$ENV:USERPROFILE\Desktop\$filename"
$webclient = New-Object System.Net.WebClient
$webclient.DownloadFile($source,$destination)
$patha = "C:\Program Files\ICU\HeartRate.exe"
$pathb ="C:\Program Files (x86)\ICU\HeartRate.exe"
$Folder1Path = 'C:\Program Files\ICU\HeartRate.exe'
$Folder2Path = 'C:\Program Files (x86)\ICU\HeartRate.exe'
}
# Install Application
$process = Start-Process $destination -PassThru -Wait
$process.ExitCode
Write-Host $process.Exitcode
# Uninstall
if ((Test-Path -Path $Folder1Path) -eq "true") {
{
$Folder1Path = "C:\Program Files\ICU\HeartRate.exe"
$arg1 = "-uninstall"
& $Folder1Path $Arg1
}
}
if ((Test-Path -Path $Folder2Path) -eq "true") {
{
$Folder2Path = "C:\Program Files\ICU\HeartRate.exe"
$arg1 = "-uninstall"
& $Folder2Path $Arg1
}
} elseif ((Get-WmiObject Win32_OperatingSystem).OSArchitecture -eq "32-bit") {
# Download Application
$source = "http://heartrate0001/HeartRate.exe"
$destination = "$ENV:USERPROFILE\Desktop\$filename"
$webclient = New-Object System.Net.WebClient
$webclient.DownloadFile($source,$destination)
# Install Application
$process = Start-Process $destination -PassThru -Wait
$process.ExitCode
Write-Host $process.Exitcode
# Uninstall
$app = "C:\Program Files\ICU\HeartRate.exe"
$arg1 = "-uninstall"
& $app $Arg1
}
【问题讨论】:
-
您的卸载块有两组花括号,我怀疑这会使内容成为脚本块,因此里面的代码没有执行。
-
我建议使用环境变量 >
"$env:ProgramFiles"和"${env:ProgramFiles(x86)}" -
你为什么安装只是为了再次卸载应用程序?
-
我知道这很令人困惑,但是我们有一个系统代理,无论设备在哪个网络上都可以进行通信,因为它在每个网络上都有一个接口。无论出于何种原因,代理卡在我们的开发界面上并且不会与我们的生产通信。我们需要它进行通信以获取要卸载的新密码,因为旧管理员不知道他输入的密码是什么。它的愚蠢..
标签: powershell if-statement installation uninstallation