使用 teambootstrapper(带有启动进程)处理 Microsoft Teams 卸载时的错误

问题描述 投票:0回答:2

我正在努力解决使用其 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 error-handling uninstallation
2个回答
1
投票

如何捕获powershell中的输出?

  • 从根本上说,您无法直接捕获来自

    Start-Process
    调用的进程输出 - 您所能做的就是使用-RedirectStandardOutputRedirectStandardError
    将其重定向到
    文件

  • 也就是说,除了特殊情况,没有需要使用

    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安装失败?

考虑使用最广泛使用的 PowerShell 测试框架,

Pester
,它允许您模拟命令调用,允许您模拟故障。


0
投票

我有这个。我怀疑它设置了退出代码。

.\teambootstrapper -x

{
  "success": true
}

或者(remove-appxprovisionedpackage 没有 -whatif 参数!):

Get-AppxProvisionedPackage -online | ? displayname -eq msteams |
  Remove-AppxProvisionedPackage -Online -allusers

Path          :
Online        : True
RestartNeeded : False

© www.soinside.com 2019 - 2024. All rights reserved.