Jus*_*eat 8 windows powershell cmd errorlevel
我试图通过Windows命令提示符启动PowerShell命令将文本替换为文件.问题是,即使我的PowerShell命令不起作用,我总是得到ErrorLevel = 0.我的问题是当我启动PowerShell时如何将错误代码导入ErrorLevel cmd?请注意,我想通过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"
Run Code Online (Sandbox Code Playgroud)
但我也尝试过同样的:
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"
Run Code Online (Sandbox Code Playgroud)
根据majkinetor的评论,我尝试了以下内容并且也没有工作:(即使在PowerShell中发生错误,我仍然在Dos中获得ErrorLevel 0.
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}"
Run Code Online (Sandbox Code Playgroud)
您可以清楚地看到与文件名不存在的错误,但错误级别始终为0.
我想要的是为执行PowerShell命令时发生的每个错误获取除0之外的错误代码.
根据我读到的一些评论,我想说:我想通过PowerShell和Dos命令来实现,而不是采用不同的方式.我不想制作自己的错误代码或个性化的错误管理!我想要的是当我的powershell(代码,脚本等)发生错误时,Dos的错误级别得到这个错误代码(我不想自己编写代码).有答案的人会受到欢迎并感谢他们,但是这些人只是通过要求改变我想要的东西或者删除照片等来评论无益评论...请不要发表评论,除了提供一个帮助和回答我的问题不是通过提出别的东西,我要求帮助一些特定的东西,请不要将主题改为别的东西..这个网站的想法是提供帮助,而不是添加无用的和无益的评论.
在cmd.exe shell中尝试以下代码:
C:> powershell -noprofile -command " try { 1/0 } catch {exit 22}"
C:> echo %errorlevel%
22
Run Code Online (Sandbox Code Playgroud)
因此,在try块中添加命令。如果发生这种情况,可以调用non powershell命令 exit $LastExitCode(但可以从try块中进行)。
编辑
好的,我知道您的非工作代码正在发生什么,它从未通过低谷捕获块,因为Get-Content产生了非终止错误。您必须注意以下几点:
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:\Users\majkinetor\HvsvmAppserver.ref' because it does not exist.
At line:1 char:8
+ try { (Get-Content HvsvmAppserver.ref -ea stop) -replace '-Dfr.base0. ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\majkinetor\HvsvmAppserver.ref:String) [Get-Content], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
C:> echo %errorlevel%
123
Run Code Online (Sandbox Code Playgroud)
请注意-ea stop,我已添加到两个命令中(比ErrorAction更短)。我的解决方案第一次是正确的,但是,您需要了解脚本也必须正确设计。您可能还想使用trapcatch代替,但是您仍然必须使用EA停止。不太依赖脚本的最短的通用解决方案可能是:
$ErrorActionPreferance = 'Stop'
<your script goes here, no need for -ea stop in it>
trap { exit 123 }
Run Code Online (Sandbox Code Playgroud)
如果有问题的脚本发生更改$ErrorActionPreference(这种情况很少发生),则将无法使用,但在所有其他情况下都可以使用。
| 归档时间: |
|
| 查看次数: |
9341 次 |
| 最近记录: |