Groovy/Jenkins脚本中的“适合 bat ”命令

chy5wohz  于 2022-11-01  发布在  Jenkins
关注(0)|答案(2)|浏览(270)

下面是用于检查服务状态并根据条件停止服务或启动服务的bat命令。
//Bat命令

for /F "tokens=3 delims=: " %%H in ('sc query wuauserv ^| findstr "STATE"') do ( if /I "%%H" NEQ "Running" ( net start wuauserv ) else (echo "Hello World"))

//Jenkins档案

bat 'for /F "tokens=3 delims=: " %%H in ('sc query wuauserv ^| findstr "STATE"') do ( if /I "%%H" NEQ "Running" ( net start wuauserv ) else (echo "Hello World"))'

当我把批处理命令放在Jenkins文件中时,显示语法错误。最后当我删除语法错误时,但现在命令无法正常工作
//不含语法错误的Jenkins档案

bat 'for /F "tokens=3 delims=: " %%H in ("sc query wuauserv ^| findstr "STATE"") do ( if /I "%%H" NEQ "Running" ( net start wuauserv ) else (echo "Hello World"))'

我只想让批处理命令适合Jenkins文件并正常工作。

4xy9mtcn

4xy9mtcn1#

您在批处理文件中使用的命令对于您使用它的目的来说是不必要的。
也许以下批处理文件命令会更好地为您服务:

@%SystemRoot%\System32\sc.exe Query wuauserv | %SystemRoot%\System32\findstr.exe /R /C:"STATE  *: 1  *" 1>NUL && (Start %SystemRoot%\System32\sc.exe Start wuauserv) || Echo "Hello World"

但是请注意,|| Echo "Hello World"可能不是必需的,因为主机在您有时间读取它之前就已经退出了。

@%SystemRoot%\System32\sc.exe Query wuauserv | %SystemRoot%\System32\findstr.exe /R /C:"STATE  *: 1  *" 1>NUL && Start %SystemRoot%\System32\sc.exe Start wuauserv
  • 您可能注意到我使用了1,(STOPPED),而不是RUNNING来检查。这不仅使命令不依赖于语言,而且2可能(开始_等待),3(停止_挂起)和4(RUNNING),但没有一个处于当前状态,可以启动。您的方法将所有非RUNNING的对象视为可以启动,但正如您在上面看到的,事实并非如此。*
jaxagkaj

jaxagkaj2#

我通过简单地跳过('')来解决这个问题,因为在命令中再次使用这些字符会导致语法错误,所以我通过在命令中使用\来跳过它们。命令现在可以完美地工作,没有groovy语法错误。
//以下是示例

bat 'for /F "tokens=3 delims=: " %%H in (\'sc query wuauserv ^| findstr "STATE"\') do ( if /I "%%H" EQU "Running" ( net stop wuauserv ) else (echo "Service already stopped"))'

相关问题