如何处理 Start-Job 中运行命令的错误?

2023-12-14

我正在编写一个自动化脚本。我有一个函数,它接受命令或可执行文件。我必须等到命令或可执行文件完成运行并在失败或通过时返回。我还想将输出写入文件。我正在尝试与Start-Job cmdlet.

我当前的代码:

$job = Start-Job -scriptblock {
    Param($incmd)
    $ret = Invoke-Expression $incmd -ErrorVariable e
    if ($e) {
        throw $e
    } else {
        return $ret
    }
} -ArumentList $outcmd

Wait-Job $job.id

"write the output to file using receive-job and return if passed or failed"

这对于命令来说非常有效,但对于可执行文件来说,无论错误代码的值如何$e一片空白。即使错误代码为 0,这也会错误地显示为已通过。

我尝试使用错误代码$LASTEXISTCODE and $?. But $?对于可执行文件来说是正确的并且$LASTEXISTCODE是命令的空值或垃圾值。我没有主意了,就到这里了。


如有疑问,请阅读文档:

$?
包含上次操作的执行状态。如果最后一个操作成功,则它包含 TRUE;如果失败,则包含 FALSE。

[…]

$最后的代码
包含最后运行的基于 Windows 的程序的退出代码。

基本上,您需要检查两者。$?表示是否最后一个电源外壳命令/cmdlet 已成功运行,而$LASTEXITCODE包含退出代码外部程序这是最后执行的。

if (-not $? -or $LASTEXITCODE -ne 0) {
    throw '... whatever ...'
} else {
    return $ret
}

然而,Invoke-Expression不是一个很好的执行命令的方法。根据您实际想要执行的内容,可能有更好的方法来执行它,以及更好的错误处理方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何处理 Start-Job 中运行命令的错误? 的相关文章

  • 如何使用 .NET 4 运行时运行 PowerShell?

    我正在更新管理一些 NET 程序集的 PowerShell 脚本 该脚本是为针对 NET 2 与 PowerShell 运行的框架版本相同 构建的程序集编写的 但现在需要使用 NET 4 程序集以及 NET 2 程序集 由于 NET 4 支
  • launch.json 中不允许使用属性 env [VSCode]

    我所做的就是在 VS 中初始化一个模板 Azure Functions 项目 当我尝试通过设置运行配置环境变量时launch json VS直接警告我这是不 允许的 此外 即使当我尝试运行我的 ps1无论如何 对于 env 来说 它不起作用
  • 在powershell中,使用export-csv cmdlet,我的整数被引号封装,知道为什么吗?

    所以我运行一个sql查询 通过管道传输到export csv 唯一的问题是所有值都用引号封装 包括整数 这对我来说不可能作为整数重新导入到SQL中 有什么想法吗 CSV 没有类型的概念 它是纯粹基于字符串的格式 PowerShell 只引用
  • 通过等待任务或访问其 Exception 属性都没有观察到任务的异常

    这些是我的任务 我应该如何修改它们以防止出现此错误 我检查了其他类似的线程 但我正在使用等待并继续 那么这个错误是怎么发生的呢 通过等待任务或访问其 Exception 属性都没有观察到任务的异常 结果 未观察到的异常被终结器线程重新抛出
  • netsh 结果到 PowerShell 对象

    我正在尝试与NETSH https ss64 com nt netsh html来自 PowerShell 我想看到这个命令的结果 例如一个对象 但是netsh返回一个字符串 netsh wlan show hostednetwork Ge
  • PowerShell中有解析TOML文件的模块吗?

    我正在尝试寻找一个TOML https toml ioPowerShell 的文件解析器 我也找不到任何有关它的信息PowerShell 画廊 https www powershellgallery com 或在预安装的 PowerShel
  • 动态参数值取决于另一个动态参数值

    启动前提 非常严格的环境 Windows 7 SP1 Powershell 3 0 使用外部库的可能性有限或不可能 我正在尝试重写之前创建的 bash 工具 这次使用 PowerShell 在 bash 中 我实现了自动完成功能 以使该工具
  • 通过 PowerShell 运行 .cmd 文件

    我正在尝试使用 PowerShell 在远程服务器上运行 cmd 文件 在我的 ps1 脚本中我尝试过 C MyDirectory MyCommand cmd 它会导致此错误 C MyDirectory MyCommand cmd is n
  • 将带有星号的注册表项传递给测试路径

    我想通过以下方式运行此注册表路径Test Path在 PowerShell 中 但它包含一个星号 该星号在注册表中有效 但在 Windows 路径中无效 问题是 当我通过它时 Test Path将星号视为通配符 因此这需要非常非常长的时间
  • Convertfrom-string 删除前导零

    我在使用 Convertfrom String cmdlet 时遇到问题 value something 009 value ConvertFrom String Delimiter Output P1 P2 something 9 我想要
  • Android Manifest 自动生成无效权限

    我不小心在 Android 清单中输入了无效的权限名称 并且无法将其删除 这是我的清单代码
  • 获取进程和进程所有者

    我正在尝试对一个脚本进行排序 该脚本将检索进程的所有实例以及进程各自的所有者 我有一个脚本来获取进程名称和开始时间 get process name notepad select object starttime name 我有一个脚本来获
  • 如何将哈希表添加到多维数组?无法通过成员访问枚举分配值

    我在将哈希表添加到多维数组时遇到问题 我编码如下 Data BIBs BIB BIBName BIBName Standort Standort B cher BuchName BuchName Autor Autor 此代码正在运行并创建
  • 仅从 AD 获取计算机名称

    我是 Power Shell 新手 正在测试一些命令和想法 我坚持认为应该很简单的事情 我想将 AD 中计算机对象的名称提取到文件中 到目前为止我正在尝试的方法是这样的 computers Get ADComputer Filter For
  • PowerShell JSON 添加值格式

    我正在向 json 文件添加数据 我这样做是通过 blockcvalue connectionString server localdb mssqllocaldb Integrated Security true Database data
  • 克服 Active Directory 1000 条记录的限制

    PowerShell 能够提取 1492 条记录的列表 当我使用带有 ldap3 模块的 Python 时 我遇到了 1000 条记录的限制 请帮我更改Python代码以超出限制 PowerShell 输入 get aduser filte
  • PHP 异常处理与 C#

    这是一个非常基本的问题 我希望如此 我所做的大部分异常处理都是使用 C 进行的 在 C 中 任何在 try catch 块中出错的代码都会由 catch 代码处理 例如 try int divByZero 45 0 catch Except
  • Powershell:获取 FQDN 主机名

    我想通过 powershell 脚本检索 Windows 服务器的 FQDN 名称 到目前为止我已经找到了2个解决方案 server Invoke Command ScriptBlock hostname 上面的行将仅打印服务器的短名称 s
  • PowerShell从csv中提取特定列并将其存储在变量中

    我的keys csv文件看起来像这样 PrjKey BldKey key LS LOOKUPSNAP1 LS LOOKUPSNAP1 LS LSUH3 LS LSUH3 LSPERF LPMDS0 LSPERF LPMDS0 LSPERF
  • 每当 SQLERROR 永远不起作用时

    我不知道可能是什么原因 我已经在网上花了几个小时试图找出我的情况出了什么问题 我查过官方文档 https docs oracle com cd B19306 01 server 102 b14357 ch12052 htm还有一些汤姆 凯特

随机推荐