加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何从PowerShell获取错误代码(ErrorLevel)到Windows命令提示符

发布时间:2020-12-14 02:27:08 所属栏目:Windows 来源:网络整理
导读:我试图通过 Windows命令提示符启动PowerShell命令将文本替换为文件.问题是,即使我的PowerShell命令不起作用,我总是得到ErrorLevel = 0. 我的问题是当我通过cmd启动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"

Based on the comment of majkinetor,I tried the following and hasn’t work as well :(,I am keep getting ErrorLevel 0 in Dos even when an error occurs in powershell.

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的错误级别得到这个错误代码(我不想自己编写代码).
有答案的人会受到欢迎并感谢他们,但是这些人只是通过要求改变我想要的东西或者删除照片等来评论无益评论…请不要发表评论,除了提供一个帮助和回答我的问题不是通过提出别的东西,我要求帮助一些特定的东西,请不要将主题改为别的东西..这个网站的想法是提供帮助,而不是添加无用的和无益的评论.

Error 2

解决方法

在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(很少发生),但在所有其他情况下都可以使用,那么这将不起作用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读