powershell 希望抑制Exchange联机脚本中的“此平台不支持COM互操作”错误

68bkxrlz  于 2023-03-30  发布在  Shell
关注(0)|答案(1)|浏览(129)

我一直在编写从Exchange Online中删除移动的设备的脚本。除此之外,其他一切都正常:

foreach ($item in $userdevices) {
  Remove-MobileDevice -Identity $item -whatif
  [System.Runtime.Interopservices.Marshal]::ReleaseComObject($item) | Out-Null 
}

这行[System.Runtime.Interopservices.Marshal]::ReleaseComObject($item) | Out-Null是脚本不挂起所必需的,但由于与Mac不兼容,它输出了错误。
我收到的错误是:

MethodInvocationException: /Users/XXX/XXX/MDM.ps1:80:17
Line |
  80 |  …             [System.Runtime.Interopservices.Marshal]::ReleaseComObjec …
     |                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Exception calling "ReleaseComObject" with "1" argument(s): "COM Interop is not supported on this platform."

我尝试添加try-catch机制,-ErrorAction SilentlyContinue-WarningAction SilentlyContinue和其他一些变体,但没有成功。我得到以下错误:

ParserError: /Users/XXX/XXX/MDM.ps1:80:83
Line |
  80 |  … nteropservices.Marshal]::ReleaseComObject($item) -ErrorAction:Silentl …
     |                                                     ~~~~~~~~~~~~
     | Unexpected token '-ErrorAction' in expression or statement.
bvuwiixz

bvuwiixz1#

[System.Runtime.InteropServices.Marshal]::ReleaseComObject($item)是一个 * 表达式 *(一个.NET方法调用),为了静默 * 异常*(又名 * 语句终止错误 *),它可能会抛出,你需要try { ... } catch { ... }

# Using just {} as the catch block means that any exception is *quietly ignored*.
try { 
  $null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($item) 
} catch {}

注意:$null = ...... | Out-Null的一个性能更好的替代方案-有关详细信息,请参阅this answer
注:

  • 如果需要,可以通过catch块中的自动$_变量获得异常对象;你可以用throw(不需要参数)* 重新抛出 * 异常。
  • 即使您简单地忽略该异常,它仍然会记录在PowerShell的会话范围的错误日志中,即自动$Error变量。

至于你所尝试的

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($item) -ErrorAction SilentlyContinue

这会导致语法错误,因为公共-ErrorAction参数(与所有common parameters一样,也就是-WarningAction)仅适用于 * 命令 *,更具体地说,适用于 * cmdlet *(例如,Get-ChildItem)和 * advanced函数和脚本 *(其行为类似于cmdlet,但与前者不同的是,它是通过 * 编译代码 (.NET程序集)实现的,是在PowerShell 中编写的)。
请注意,表达式和命令都是根据about_Parsing帮助主题中讨论的 separate syntax rules aka parsing modes 进行解析的。

相关问题