Думая немного нестандартно здесь, я собираюсь предложить, что powershell может быть ответом на современные машины XP / 2003 и, конечно, на Vista / 2008 и новее (вместо .bat / .cmd) , Любой, у кого есть немного Perl на заднем плане, должен чувствовать себя как дома довольно быстро.
$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";
}
Другим способом, если у вас есть значительные инвестиции в пакетную обработку, является запуск сценария PS в виде однострочника, возвращающего код завершения.
@ECHO off
SET PS=powershell -nologo -command
%PS% "& {if((get-service SvcName).Status -eq 'Running'){exit 1}}"
ECHO.%ERRORLEVEL%
Работа в режиме одной строки также обходит стандартную политику подписывания кода PS за счет беспорядка. Чтобы поместить команды PS в файл .ps1 и выполнить их как powershell myCode.ps1
, вы можете обнаружить, что для подписи сценариев powershell необходимо запускать их автоматически (зависит от вашей среды). Подробнее см. http://www.hanselman.com/blog/SigningPowerShellScripts.aspx