我正在努力解决使用其 teambootstrapper.exe 卸载 Microsoft Teams 的错误处理问题。
使用teambootstrapper的
-x
标志,卸载将成功:“true”或成功:“false”
但是函数(如下)不会显示 teambootstrapper.exe 的正确输出:
$team = "$PSScriptRoot\teamsbootstrapper.exe"
$msix = "$PSScriptRoot\MSTeams-x64.msix"
function InstallTeams {
param(
)
try {
$r = Start-Process -FilePath `"$team`" -ArgumentList "-x" -Wait
$resultObj = try { $r | ConvertFrom-Json } catch { $null }
if ($resultObj -eq $null -or $resultObj.success -eq $false) {
throw ''
}
write-host 'ERROR: Teams uninstallation failed'
return $false
}
catch {
write-host 'Teams uninstallation is done'
return $true
}
}
InstallTeams
使用 PowerShell 时不会显示任何输出,而使用“teamsbootstrappe.exe -x”时,使用 cmdlet 您将获得成功:“true”或成功:“false”。
第一个问题:如何捕获 PowerShell 中的输出?
第二个问题:有没有办法让teambootstrapper.exe安装失败?每次都卸载成功
多种输出方式,没有捕捉到“true”或“false”。
如何捕获powershell中的输出?
Start-Process
调用的进程输出 - 您所能做的就是使用-RedirectStandardOutput
和RedirectStandardError
将其重定向到文件。
也就是说,除了特殊情况,没有需要使用
Start-Process
来同步调用一个产生stdout(也可能是stderr)输出的程序,即一个控制台( -子系统)应用程序:
只需使用直接调用,这是隐式同步的,并将应用程序进程的 stdout 和 stderr 流直接连接到 PowerShell 的输出流。
此外,PowerShell 会在 automatic
$LASTEXITCODE
变量中隐式反映进程退出代码。
$LASTEXITCODE
值通常比检查应用程序的输出更可靠地指示失败。因此,如果您想坚持分析应用程序的 stdout 输出的方法,请将
Start-Process
调用替换为以下内容:
# Use direct invocation; note the need to use &, the call operator,
# for syntactic reasons.
$r = & $team -x
有没有办法让teambootstrapper.exe安装失败?
Pester
,它允许您模拟命令调用,允许您模拟故障。
我有这个。我怀疑它设置了退出代码。
.\teambootstrapper -x
{
"success": true
}
或者(remove-appxprovisionedpackage 没有 -whatif 参数!):
Get-AppxProvisionedPackage -online | ? displayname -eq msteams |
Remove-AppxProvisionedPackage -Online -allusers
Path :
Online : True
RestartNeeded : False