Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.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 检查多个条件,如果所有条件都为false,则执行某些操作_Powershell_Logic - Fatal编程技术网

Powershell 检查多个条件,如果所有条件都为false,则执行某些操作

Powershell 检查多个条件,如果所有条件都为false,则执行某些操作,powershell,logic,Powershell,Logic,有点背景 我正在尝试写一个脚本,它将持续运行。我需要检查队列目录中是否有XML文件,如果有,则发送API调用以启动一些服务器 我已经把这个零件整理好了,它可以用了 我在第二部分遇到问题,如果满足以下条件,我需要它发送另一个API调用来关闭服务器 队列目录必须为空 正在运行的目录必须为空 服务器启动和停止之间的时间必须是最接近的一小时(AWS按小时计费,如果服务器只运行几分钟,停止服务器没有意义,因为我们仍将按整小时计费。如果我们需要重新启动,我们将再收费一小时。) 以下是我到目前为止的情况:

有点背景

我正在尝试写一个脚本,它将持续运行。我需要检查队列目录中是否有XML文件,如果有,则发送API调用以启动一些服务器

我已经把这个零件整理好了,它可以用了

我在第二部分遇到问题,如果满足以下条件,我需要它发送另一个API调用来关闭服务器

  • 队列目录必须为空
  • 正在运行的目录必须为空
  • 服务器启动和停止之间的时间必须是最接近的一小时(AWS按小时计费,如果服务器只运行几分钟,停止服务器没有意义,因为我们仍将按整小时计费。如果我们需要重新启动,我们将再收费一小时。)
以下是我到目前为止的情况:

$QueueDir = "D:\Test"
$RunningDir = "D:\Test\copydir"
while (!(Test-path $QueueDir\*.xml)) {Start-Sleep 10}
Write-Host "Starting Servers, API NORMALLY GOES HERE"
$Starttime = (Get-Date)
Write-Host "Started Servers @ $Starttime"
Start-Sleep -Seconds 30

while (!(Test-Path $rundir\*.xml)) {Start-Sleep 10}
$now = (Get-Date)
$timespan = (New-TimeSpan -Start $Starttime -End $now)
if ( (Test-Path $QueueDir\*.xml) -or (Test-Path $RunningDir\*.xml) -or ($timespan.Minutes -gt 50 -and -lt 55) ) {
  Write-Host "Stopping Servers, API NORMALLY GOES HERE"
  $StopTime = (Get-Date)
  Write-Host "Stopped Servers @ $Stoptime"
}
这很简单。如果这三个条件都不成立,则需要采取行动。可以这样表述:

!A ^ !B ^ !C # (not A) and (not B) and (not C)
if (-not ((Test-Path ...) -or (Test-Path ...) -or ($timespan.Minutes ...))) {
  ...
}
在您的代码中,如下所示:

!A ^ !B ^ !C # (not A) and (not B) and (not C)
if (-not ((Test-Path ...) -or (Test-Path ...) -or ($timespan.Minutes ...))) {
  ...
}

$timespan.Minutes-gt 50-和-lt 55
不是有效的PowerShell逻辑。您必须在
之后提供一个值表达式。您将收到如下错误:

!A ^ !B ^ !C # (not A) and (not B) and (not C)
if (-not ((Test-Path ...) -or (Test-Path ...) -or ($timespan.Minutes ...))) {
  ...
}
必须在“-and”运算符后面提供值表达式。 +CategoryInfo:ParserError:(:)[],ParentContainerErrorRecordException +FullyQualifiedErrorId:ExpectedValueExpression

因此,您需要像这样使用它:

$timespan.Minutes -gt 50 -and $timespacn.Minutes -lt 55

您的问题或“问题”到底是什么?我不完全确定发生了什么,我非常确定我在第二段代码中的逻辑是错误的。当我运行它时,它不会关闭服务器。我的建议是,在第二个循环的每个阶段放置
write host
,以获得代码从未到达的位置的视觉反馈。i、 e.它是否会进入您的API调用代码?一旦你找到了问题的确切区域,你将有一个更好的时间调试它。好的,谢谢。所以,从“全新的视角”来看,你看不出它有什么问题吗?好的,太好了,我会做更多的测试,如果可以的话,我会报告的?