发生错误时如何停止powershell脚本?

2024-04-28

我有一个“主”powershell 脚本,它执行多个在虚拟机上安装应用程序的脚本。我正在尝试在主脚本上实现错误控制,意思是:

如果安装应用程序的脚本之一失败,则不会执行其余脚本。

这是我的主要脚本:

try{
    powershell.exe -ExecutionPolicy Unrestricted -File 'C:\\TEST\\Scripts\\App1.ps1'    
    powershell.exe -ExecutionPolicy Unrestricted -File 'C:\\TEST\\Scripts\\App2.ps1'    
    powershell.exe -ExecutionPolicy Unrestricted -File 'C:\\TEST\\Scripts\\App3.ps1'    
 
}catch
{
  Write-Host "Error"

}

以下是安装应用程序的脚本之一 (App2.ps1) 的示例(所有脚本都遵循与此脚本相同的逻辑)

#Set logging 
$logFile = "C:\TEST\Logs\" + (get-date -format 'yyyyMMdd') + '_softwareinstall.log'
function Write-Log {
    Param($message)
    Write-Output "$(get-date -format 'yyyyMMdd HH:mm:ss') $message" | Out-File -Encoding utf8 $logFile -Append
}


#Install APP2 
$file = Test-Path "C:\TEST\Apps\APP2\APP2 x64 7.2.1.msi"
if($file)
{
   try{
        Write-Log "Installing App2"
        Start-Process msiexec.exe -Wait -ArgumentList '/i "C:\TEST\Apps\APP2\App2 x64 7.2.1.msi" ALLUSERS=1 AddLocal=MiniDriver,PKCS,UserConsole,Troubleshooting,Help /qn /norestart' 
        if(Test-Path -Path "C:\Program Files\HID Global\APP2\ac.app2.exe")
        {
            Write-Log "App2 installed"
        }
        else
        {
            Write-Log "There was a problem while installing App2"
        throw "There was a problem while installing App2"
        }
    }catch
    {
        Write-Log "[ERROR] There was a problem while starting the installation for App2"
        throw "[ERROR] There was a problem while starting the installation for App2"
    }
}
else
{
     Write-Log "Installation file for App2 not found"
     throw "Installation file for App2 not found"
}

Here is the output: enter image description here

(出于保密目的,我模糊了应用程序的名称)

为什么安装APP2的脚本异常时主脚本继续执行? 不应该停止并显示主脚本中 catch 部分所写的消息吗?

先感谢您


按照建议我添加了$ErrorActionPreference = 'Stop'到我的脚本的开头

$ErrorActionPreference = 'Stop'

try{
    powershell.exe -ExecutionPolicy Unrestricted -File 'C:\\TEST\\Scripts\\APP1.ps1'    
    powershell.exe -ExecutionPolicy Unrestricted -File 'C:\\TEST\\Scripts\\APP2.ps1'    
    powershell.exe -ExecutionPolicy Unrestricted -File 'C:\\TEST\\Scripts\\APP3.ps1'    
 
}catch
{
  Write-Host "Error"

}

输出只是消息“Error”,在 catch 部分中指出。

谢谢至@道格·毛雷尔 https://stackoverflow.com/users/4085331/doug-maurer

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

发生错误时如何停止powershell脚本? 的相关文章

  • 使用 powershell 从远程服务器获取服务状态

    如何获取需要用户名和密码登录的远程计算机的服务状态 我正在尝试使用以下代码找到解决方案 serviceStatus get service ComputerName machineName Name service 默认语法为get ser
  • ConvertTo-JSON 具有单个项目的数组

    我正在尝试创建一个 JSON 序列化数组 当该数组仅包含一项时 我得到一个字符串 而不是字符串数组 JSON 格式 多个项目 按预期工作 PS C gt one two ConvertTo JSON one two 单个项目数组 不符合预期
  • 在 PowerShell 中通过 UDP 发送和接收数据

    我正在尝试编写一个脚本来使用 PowerShell 进行测试和应用 测试应包括通过 UDP 向远程服务器发送字符串 然后读取该服务器的响应并对结果执行某些操作 我需要的唯一帮助是脚本的中间两个步骤 发送字符串 然后 接收响应 在端口 UDP
  • PowerShell 中一个命令中的多个前景色

    我想用一个语句输出许多不同的前景色 PS C gt Write Host Red ForegroundColor Red Red 该输出为红色 PS C gt Write Host Blue ForegroundColor Blue Blu
  • 使用 PowerShell 在 IIS FTP 站点上设置权限和设置

    我是 PowerShell 的初学者 我尝试了这个脚本并且运行良好 但我需要将 FTP 授权规则更改为 所有用户 读 写 并将 FTP 用户隔离 更改为 用户名目录 NEEDED FOR IIS CMDLETS Import Module
  • 获取 SecureString 作为纯文本参数

    我正在尝试将 SecureString 作为纯文本参数获取到命令行 PowerShell 我知道安全字符串的形式是什么 例如 字符串 abc 将是安全字符串 71289371289 然后 我想将 71289371289 作为参数传递给脚本
  • powershell有method_missing()吗?

    我一直在研究 powershell 的动态功能 我想知道一些事情 powershell 中是否有类似于 Ruby 的 method missing 的东西 您可以在其中设置 捕获所有方法 来动态处理对对象上不存在的方法的调用 不 不是真的
  • 从所有通讯组中删除所有前雇员

    因此 今天我被分配的任务是从所有 DL 中删除域中的所有前员工 他们在 AD 中拥有自己的文件夹 有没有什么方法可以快速做到这一点 或者至少比单独检查每个并转到 gt 的成员删除所有更快 Thanks 编辑以添加更多信息 有 822 个用户
  • 从 Get-ChildItem -Path 返回对象数组

    从 powershell 开始 ls R txt将按目录递归列出文件 或者更好 PS gt Get ChildItem Path C Test Name logs anotherfile txt Command txt CreateTest
  • Jenkins 中的 Powershell 转义路径字符

    我有一个声明性管道 应该执行 powershell 步骤来安装路径 路径作为参数提供 parameters string name UNC defaultValue server01 lab local shared data descri
  • 无法在 Windows docker 容器中配置 ASP.NET HTTPS 端点

    在 Windows docker 容器中运行 ASP NET Core 时出现此错误 Unhandled Exception System InvalidOperationException Unable to configure HTTP
  • Powershell:如何捕获主机的输出

    我正在使用 powershell 自动执行一些与 TFS 中签出 合并相关的任务 当我打电话时 tf get recurse 我得到一堆关于正在检出的文件的数据滚动 该命令生成的最后一行 假设成功 是告知签到号码的行 我想解析它 以便稍后在
  • SNMP 响应被 PowerShell 破坏?

    考虑以下 PowerShell 代码 SNMP New Object COMObject OLEPrn OLESNMP SNMP Open 10 178 230 105 public 2 3000 MACAddress SNMP Get 1
  • Windows Sandbox PowerShell 登录命令窗口不可见

    我正在尝试通过 PowerShell 登录命令使用 Windows Sandbox 这是LogonCommand我的 WSB 文件的部分
  • Connect-AzAccount 无提示

    我正在尝试使用以下方式登录 Azure 门户 Connect AzAccount 此代码要求我输入我不想要的提示 我们可以使用一些简单的配置脚本自动登录吗 正如Joy所说 您可以通过凭据使用用户帐户登录 但不会出现任何提示 请确保您的帐户未
  • 在Powershell中,如何设置$?不将该值发送到管道?

    PS gt gci C lt
  • “目标计算机上的 PowerShell”任务失败,并在 TFS 2017\Azure Dev Ops 中出现错误

    我尝试使用 TFS 构建定义中的 目标计算机上的 PowerShell 任务来运行其中一台 Azure 服务器上存在的 PowerShell 脚本 但该任务失败并出现以下错误 System Management Automation Run
  • 在 Array Powershell 中获取新的附加值

    for Get All Files from the Folder FolderItems Get PnPFolderItem FolderSiteRelativeUrl FolderURL ItemType File Write Host
  • Jenkins 执行 PowerShell 脚本

    我正在尝试从 Jenkins 运行 PowerShell 脚本 但它似乎完全忽略了执行策略 可以通过直接执行 powershell exe 或使用PowerShell插件 https wiki jenkins ci org display
  • Powershell脚本命令持久化

    我开始学习 Powershell 并编写一个模块 psm1 来存储我的函数 然后我将这段代码插入到模块中 以便在修改模块时重新加载模块 function reload Remove Module init Import Module F S

随机推荐

  • 如何在 MVC 3 Razor View Engine 中使用 C# 显示和隐藏 Div?

    我必须编写 C 代码来在 MVC3 中显示和隐藏 div 以用于基于 C 中的 switch case 的各种控件 如何在不使用 JQuery Show 或 hide 的情况下完成它 但在完全服务器端 将 switch 语句直接添加到 cs
  • Google Apps onEdit 事件 - event.source 未定义

    Google 文档允许编写脚本 当单元格内容与特定单词匹配时 我试图更改单元格的颜色 我的问题是 onEdit 函数没有按照此处指定的方式工作 https developers google com apps script guide ev
  • 未找到神奇函数“bash”

    我有一堆模拟想要在高性能集群上运行 我应该在这些集群上进行预留以获得计算时间 由于预订是有时间限制的 我正在开发一个自动化脚本 我可以scp进入集群并运行 然后 该脚本将下载相关的模拟文件 运行它们 并上传结果 该自动化脚本的一部分位于ba
  • 转义 C++ 字符串

    将 C std string 转换为另一个 std string 的最简单方法是什么 它转义了所有不可打印的字符 例如 对于两个字符的字符串 0x61 0x01 结果字符串可能是 a x01 或 a 01 看看Boost的字符串算法库 ht
  • 在 getElementsByClassName 的数组上使用 forEach 会导致“TypeError: undefined is not a function”

    In 我的 JSFiddle http jsfiddle net jer2 zcrh9 3 我只是想迭代一个元素数组 正如日志语句所证明的那样 该数组非空 然而 呼叫forEach给了我 不太有帮助 未捕获TypeError undefin
  • Emacs lisp:将字符翻译为标准 ASCII 转录

    我正在尝试编写一个函数 将包含 unicode 字符的字符串转换为某种默认的 ASCII 转录 理想情况下 我想要例如 ngstr m成为Angstroem或者 如果不可能的话 Angstrom 同样地 应该成为a x c 或类似的 Ema
  • 如何使用我自己的声明文件解决“无法找到模块的声明文件”错误?

    我有一个测试项目 正在其中测试类型定义文件 该项目有一个文件名为index ts看起来像这样 import i18nFu require gettext js The 获取文本 js包是使用 Node js 安装的 如下所示 npm ins
  • iOS 7 中的后台任务间隔时间

    我在 appdidEnterBackground 中有以下代码 我看到在 IOS 6 中我看到后台时间段约为 10 分钟 而 IOS 7 中的相同代码打印 2 分钟 这是代码 void applicationDidEnterBackgrou
  • 当有太多需要滚动的项目时,Windows 窗体列表框会溢出

    我正在构建一个基于后缀树的索引器应用程序 它使我能够非常快地索引整个文档并搜索字符串 子字符串等 我正在做的是在文本框中输入一个字符串 按下按钮 然后运行一个函数来查询后缀树并将所有出现的字符串的位置添加到列表框中 所以列表框里面有很多整数
  • 用于从 PHP 更新实时
  • 的 jQuery 插件
  • 有没有任何 jQuery 插件可以创建类似实时 feed 的东西推特主页 http www twitter com 使用 PHP 它从 MySQL 数据库获取数据 PHP 文件必须如何 Thanks 您确实不需要为此使用插件 您可以使用 j
  • MS Access 2007 中 NVL 功能的替代方法是什么

    我在 MS Access 中编写了一个 SQL 查询 select NVL count re rule status 0 from validation result re validation rules ru where re cycl
  • 实体框架 LINQ To Entities 生成奇怪的慢速 SQLWhere 子句

    我需要理解这一点 EF5 0 和 EF6 在 TSQL 代码生成方面存在很大差异 在我的代码中 这是我的 LINQ 语句 var qry2 context viw overview 1 Where i gt i article EAN17
  • 设置div内的div滚动,而父级不滚动

    我有一个容器 div 其中包含许多子 div 我的容器中的 div 之一包含评论 我不想将整个 div 设置为滚动 而是希望所有内容都保持在原位 只留下评论 div 滚动 我尝试将父级溢出设置为隐藏 将注释 div 设置为滚动 滚动条实际上
  • 为什么旋转图像时会出现黑色边框? PHP GD

    此代码使用 GD 生成两张图像并旋转其中一张 当我旋转图像时 黑色边框开始出现 有人知道如何解决这个问题吗
  • 如何更改传单弹出窗口的背景颜色?

    我正在使用 Leafletjs 创建地图 我想将弹出窗口 当前显示图像和链接 的背景颜色从白色更改为其他颜色 看起来基本的背景颜色 CSS 语法并不能解决这个问题 有什么建议吗 谢谢 斯科特 调用 leaflet css 后 您可以包含
  • std::array<> 的初始化

    考虑以下代码 include
  • ssh:无法确定主机“主机名”的真实性

    当我 ssh 到一台机器时 有时我会收到此错误警告 并提示说 是 或 否 当从自动 ssh 到其他机器的脚本运行时 这会导致一些问题 警告信息 The authenticity of host
  • 如何根据 MuMIn model.avg() 摘要进行绘图

    有没有一种方法可以直接绘制 MuMIn model avg 对于具有置信带的不同变量的模型平均摘要输出 以前我一直使用 ggplot 和 ggpredict 来绘制实际模型中的项 但我一直无法找到一种方法来绘制平均模型的结果 显然 我可以手
  • iPhone:如何删除/清除蓝牙 4.0 数据

    我有一些大麻烦 https stackoverflow com questions 11557500 corebluetooth central manager callback diddiscoverperipheral twice co
  • 发生错误时如何停止powershell脚本?

    我有一个 主 powershell 脚本 它执行多个在虚拟机上安装应用程序的脚本 我正在尝试在主脚本上实现错误控制 意思是 如果安装应用程序的脚本之一失败 则不会执行其余脚本 这是我的主要脚本 try powershell exe Exec