如何从PowerShell获取错误代码(ErrorLevel)到Windows命令提示符
我试图通过
Windows命令提示符启动PowerShell命令将文本替换为文件.问题是,即使我的PowerShell命令不起作用,我总是得到ErrorLevel = 0.
我的问题是当我通过cmd启动PowerShell时如何将错误代码导入ErrorLevel? 请注意,我想通过Windows命令提示符进行此操作,而不是通过创建脚本部件. 这是我所说的一个例子.打印屏幕中的错误是通过选择一个非现有文件有意识地显示的,即使出现错误,ErrorLevel也等于0. 我正在使用的命令如下(我尝试了$LastExitCode和$ExitCode): powershell -NonInteractive -NoProfile -Command "(Get-Content HvsvmAppserver.ref) -replace '-Dfr.base0.role=','-Dfr.base0.role=USR_ROLE'| Set-Content -encoding ASCII HvsJvmAppserver.ref; exit $LastExitCode" 但我也尝试过同样的: powershell -NonInteractive -NoProfile -Command "(Get-Content HvsvmAppserver.ref) -replace '-Dfr.base0.role=','-Dfr.base0.role=USR_ROLE'| Set-Content -encoding ASCII HvsJvmAppserver.ref; exit $ExitCode"
powershell -noprofile -command " try { (Get-Content HvsvmAppserver.ref) -replace '-Dfr.base0.role=','-Dfr.base0.role=USR_ROLE'| Set-Content -encoding ASCII HvsJvmAppserver.ref } catch {exit $LastExitCode}" 您可以清楚地看到与文件名不存在的错误,但错误级别始终为0. 我想要的是为执行PowerShell命令时发生的每个错误获取除0之外的错误代码. 根据我读到的一些评论,我想说:我想通过PowerShell和Dos命令来实现,而不是采用不同的方式.我不想制作自己的错误代码或个性化的错误管理!我想要的是当我的powershell(代码,脚本等)发生错误时,Dos的错误级别得到这个错误代码(我不想自己编写代码). 解决方法
在cmd.exe shell中尝试此代码:
C:> powershell -noprofile -command " try { 1/0 } catch {exit 22}" C:> echo %errorlevel% 22 因此,在try块中添加命令.如果您调用non powershell命令,则可以退出$LastExitCode(但是在try块内). 编辑 好的,我知道你的非工作代码发生了什么,它从未通过catch块,Get-Content产生non-terminating error.你必须要注意: C:> Powershell -Command "try { (Get-Content HvsvmAppserver.ref -ea stop) -replace '-Dfr.base0.role=','-Dfr.base0.role=USR_ROLE'| Set-Content -encoding ASCII HvsJvmAppserver.ref -ea stop } catch {$_; exit 123 }" Get-Content : Cannot find path 'C:UsersmajkinetorHvsvmAppserver.ref' because it does not exist. At line:1 char:8 + try { (Get-Content HvsvmAppserver.ref -ea stop) -replace '-Dfr.base0. ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:UsersmajkinetorHvsvmAppserver.ref:String) [Get-Content],ItemNotFoundException + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand C:> echo %errorlevel% 123 注意我添加到两个命令的-ea停止(比ErrorAction短).我的解决方案第一次是正确的,但是,您需要了解脚本也必须正确设计.您可能还想使用陷阱而不是捕获,但您仍然必须使用EA停止.也许最短的通用解决方案不依赖于脚本: $ErrorActionPreferance = 'Stop' <your script goes here,no need for -ea stop in it> trap { exit 123 } 如果有问题的脚本更改了$ErrorActionPreference(很少发生),但在所有其他情况下都可以使用,那么这将不起作用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 订购执行WiX SetProperty操作
- windows-server-2008 – 对于使用SQL Express 2008的Window
- 在windows dos shell下使用参数执行Perl脚本的正确命令行是
- 石大iCal课表使用指南
- 为什么要在Windows服务中托管wcf服务?
- Windows的虚拟网络接口
- windows-server-2003 – 无法使用w32tm / stripchart访问某
- 您可以向Windows资源管理器发送信号以刷新系统托盘图标吗?
- laravel windows安装
- microsoft-graph – 来自Microsoft Graph API请求的HTTP 42