How to test whether a service is running from the command line

后端 未结 14 1664
天涯浪人
天涯浪人 2020-12-12 18:59

I would like to be able to query whether or not a service is running from a windows batch file. I know I can use:

sc query \"ServiceName\"

14条回答
  •  一向
    一向 (楼主)
    2020-12-12 19:31

    Thinking a little bit outside the box here I'm going to propose that powershell may be an answer on up-to-date XP/2003 machines and certainly on Vista/2008 and newer (instead of .bat/.cmd). Anyone who has some Perl in their background should feel at-home pretty quickly.

    
    $serviceName = "ServiceName";
    $serviceStatus = (get-service "$serviceName").Status;
    
    if ($serviceStatus -eq "Running") {
        echo "Service is Running";
    }
    else {
        #Could be Stopped, Stopping, Paused, or even Starting...
        echo "Service is $serviceStatus";
    }
    

    Another way, if you have significant investment in batch is to run the PS script as a one-liner, returning an exit code.

    
    @ECHO off
    SET PS=powershell -nologo -command
    %PS% "& {if((get-service SvcName).Status -eq 'Running'){exit 1}}"
    
    ECHO.%ERRORLEVEL%
    

    Running as a one-liner also gets around the default PS code signing policy at the expense of messiness. To put the PS commands in a .ps1 file and run like powershell myCode.ps1 you may find signing your powershell scripts is neccessary to run them in an automated way (depends on your environment). See http://www.hanselman.com/blog/SigningPowerShellScripts.aspx for details

提交回复
热议问题