Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PowerShell中的退出代码_Powershell - Fatal编程技术网

PowerShell中的退出代码

PowerShell中的退出代码,powershell,Powershell,我有一个日志文件,在脚本的末尾,我需要查看日志文件。如果它包含单词“ERROR:or WARNING:”我需要脚本拍摄0的退出代码。如果它不包含这些话,我需要的脚本射出一个退出代码1。基本上,如果它发现这些话,我需要它是真的,如果不是,我需要它是假的。此日志将从ESP调度程序查看,因此我需要脚本向ESP发送失败或成功代码 以下是我到目前为止的情况: $Exit = Get-Content 'H:\REPO\ADNEW\AlertLog.txt' if ($Exit -cmatch "ERROR:

我有一个日志文件,在脚本的末尾,我需要查看日志文件。如果它包含单词“ERROR:or WARNING:”我需要脚本拍摄0的退出代码。如果它不包含这些话,我需要的脚本射出一个退出代码1。基本上,如果它发现这些话,我需要它是真的,如果不是,我需要它是假的。此日志将从ESP调度程序查看,因此我需要脚本向ESP发送失败或成功代码

以下是我到目前为止的情况:

$Exit = Get-Content 'H:\REPO\ADNEW\AlertLog.txt'
if ($Exit -cmatch "ERROR:") {exit 1}
if ($Exit -cmatch "WARNING:") {exit 1}
ifelse ($Exit -cnotmatch "WARNING:", "ERROR:") {exit 0}

echo $LASTEXITCODE

当您在不使用
-Raw
开关的情况下使用
Get Content
时,您将返回
字符串的集合(存在一种边缘情况,其中单个返回是
标量
而不是
数组
)。对集合使用比较运算符时,它充当筛选器,不返回布尔值。把这些知识放在一起,你可以这样做:

$log = Get-Content -Path H:\AlertLog.txt -Raw

if ($log -cmatch '(?m)(ERROR|WARNING):') {
    1
    exit 1
}
0
exit 0

这利用了regex多行匹配选项,并通过使用
Raw
开关确保
$log
是单个字符串而不是集合。此外,在使用该代码退出进程之前,它会将exitcode回显到标准输出流。

当前代码有什么问题?输出是什么?错误是什么(如果有)?请编辑您的问题并添加更多详细信息。PowerShell运算符充当枚举数,空/非空结果在布尔上下文中分别解释为false或true,因此在这种情况下,文件是作为单个字符串还是行数组读取并不重要。@AnsgarWiechers在这种情况下,您是正确的,但是知道发生了什么很重要,这样他们就不会认为“哦,我有一个匹配项”,而可能是“哦,我有多个匹配项”。这让不熟悉这种语言的人感到困惑,条件句的真实性无助于填补知识空白。@theincorgible1-Perfect!,非常感谢。