我必须从我们的资产管理软件部署的脚本中找到并执行。exe文件。目前看起来是这样的:
Set-Location $PSScriptRoot
$proc = (Start-Process -FilePath "C:Program Files (x86)softwaresoftware nameUninstall.exe" -ArgumentList "/S /qn" -Wait -PassThru)
$proc.WaitForExit()
$ExitCode = $proc.ExitCode
Exit($ExitCode)
据我所知,文件的位置是设置的,有些用户没有设置,因此它失败了。
所以我知道你可以用
来搜索一个程序Get-ChildItem C:Program Files (x86)software
并执行Start-process -Filepath
但是我是否可以简单地将它与一个|结合起来,或者有一个更简单的方法/它甚至会工作。
正如评论者建议的那样,您可以使用Test-Path
来测试路径是否存在:
$uninstallPath = Join-Path ${env:ProgramFiles(x86)} 'softwaresoftware nameUninstall.exe'
if( Test-Path $uninstallPath ) {
$proc = Start-Process -FilePath $uninstallPath -ArgumentList '/S /qn' -Wait -PassThru
$proc.WaitForExit()
$ExitCode = $proc.ExitCode
Exit $ExitCode
}
我还通过避免硬编码的"程序文件(x86)"使代码更加健壮。目录,使用环境变量。由于env var的名称中有圆括号,因此必须将其括在花括号中。
为了增加健壮性,您可以从注册表中读取卸载程序的路径,详见本问答。如果幸运的话,该程序甚至会在注册表中存储一个QuietUninstallString
,它会为您提供完整的命令行,以便静默卸载。