在远程服务器上反复运行命令

时间:2019-12-03 22:04:06

标签: powershell

我编写了以下脚本,以5秒的间隔在远程服务器上运行命令。 $ LogrCmd变量中的命令在远程服务器上运行,以检查特定服务是否启动或关闭。我希望脚本每5秒轮询一次服务,直到服务完全关闭。但是,即使服务启动,脚本也会立即退出。

$LogrCmd = get-content 'c:\temp\info.cfg' | select-string -Pattern cheetahdev
      while (-not (Invoke-Command -ScriptBlock {& cmd.exe /c "$LogrCmd"})) {
 ## Wait a specific interval
       Start-Sleep -Seconds 5
                       }

这是针对远程主机运行的info.cfg文件的内容。

“ C:\ PWX \ pwxcmd displaystatus -sv cheetahdev”

1 个答案:

答案 0 :(得分:0)

您最好在此处使用do / while循环而不是while循环:

$LogrCmd = Get-Content 'c:\temp\info.cfg' | Select-String -Pattern cheetahdev
do {
  cmd.exe /c "$LogrCmd"

  ## Wait a specific interval
  Start-Sleep -Seconds 5
} while ( $LASTEXITCODE -eq 0 )

这将始终运行一次命令,进入睡眠状态,然后检查命令是否成功。如果命令成功执行,它将继续循环。当然,您可以定制while条件来检查其他退出代码和条件。

请注意,对于外部命令,除非需要解析命令的输出或其他较不常见的内容,否则大多数时候最好依靠$LASTEXITCODE来检查命令是否成功。

还要注意,通过从这样的文件中读取完整的命令,可以使熟悉诸如info.cfg的人进行代码注入攻击。