Команда Windows для получения сервисного состояния?

Вот более быстрый базовый подход:

Sub find()

    Dim dict As Object, names, nums, r As Long
    Dim sht As Worksheet

    Set sht = ActiveSheet

    Set dict = CreateObject("scripting.dictionary")

    names = Range("C2:C99999").Value
    nums = Range("C2:C99999").Offset(0, 4).Value

    For r = 1 To UBound(names)
        dict(names(r, 1)) = dict(names(r, 1)) + nums(r, 1)
    Next r

    WriteCounts dict, sht.Range("J1")

End Sub

Sub WriteCounts(dict As Object, rngStart As Range)
    Dim k
    For Each k In dict.keys
        rngStart.Value = k
        rngStart.Offset(0, 1).Value = dict(k)
        Set rngStart = rngStart.Offset(1, 0)
    Next k
End Sub
22
задан pb2q 13 October 2012 в 02:31
поделиться

7 ответов

Using Windows Script:

Set ComputerObj = GetObject("WinNT://MYCOMPUTER")    
ComputerObj.Filter = Array("Service")    
For Each Service in ComputerObj    
    WScript.Echo "Service display name = " & Service.DisplayName    
    WScript.Echo "Service account name = " & Service.ServiceAccountName    
    WScript.Echo "Service executable   = " & Service.Path    
    WScript.Echo "Current status       = " & Service.Status    
Next

You can easily filter the above for the specific service you want.

6
ответ дан 29 November 2019 в 03:23
поделиться

Using pstools - in particular psservice and "query" - for example:

psservice query "serviceName"
12
ответ дан 29 November 2019 в 03:23
поделиться

Вы пробовали sc.exe ?

C:\> for /f "tokens=2*" %a in ('sc query audiosrv ^| findstr STATE') do echo %b
4  RUNNING

C:\> for /f "tokens=2*" %a in ('sc query sharedaccess ^| findstr STATE') do echo %b
1  STOPPED

Обратите внимание, что внутри пакетного файла вы удваиваете каждый знак процента.

27
ответ дан 29 November 2019 в 03:23
поделиться

в соответствии с этим http://www.computerhope.com/nethlp.htm это должен быть NET START / LIST, но я не могу заставить его работать XP коробка. Я уверен, что есть какой-то WMI, который даст вам список.

0
ответ дан 29 November 2019 в 03:23
поделиться

Вы можете назвать net start "имя службы" в вашей службе. Если он не запущен, он запустит его и вернет errorlevel = 0, если он уже запущен, он вернет errorlevel = 2.

19
ответ дан 29 November 2019 в 03:23
поделиться

Если вам доступен PowerShell ...

Get-Service -DisplayName *Network* | ForEach-Object{Write-Host $_.Status : $_.Name}

Даст вам ...

Stopped : napagent
Stopped : NetDDE
Stopped : NetDDEdsdm
Running : Netman
Running : Nla
Stopped : WMPNetworkSvc
Stopped : xmlprov

Вы можете заменить **** Network **** на конкретное название сервиса, если вам нужно просто проверить один сервис.

9
ответ дан 29 November 2019 в 03:23
поделиться

Well I'm not sure about whether you can email the results of that from a batch file. If I may make an alternate suggestion that would solve your problem vbscript. I am far from great with vbscript but you can use it to query the services running on the local machine. The script below will email you the status of all of the services running on the machine the script gets run on. You'll obviously want to replace the smtp server and the email address. If you're part of a domain and you run this script as a privileged user (they have to be an administrator on the remote machine) you can query remote machines as well by replacing localhost with the fqdn.

Dim objComputer, objMessage
Dim strEmail

' If there is an error getting the status of a service it will attempt to move on to the next one
On Error Resume Next

' Email Setup
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Service Status Report"
objMessage.From = "service_report@noreply.net"
objMessage.To = "youraddress@example.net"
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.example.net"

'Server port (typically 25)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

Set objComputer = GetObject("WinNT://localhost")
objComputer.Filter = Array("Service")

For Each aService In objComputer
strEmail = strEmail &chr(10) & aService.Name & "=" & aService.Status
Next

objMessage.TextBody = strEmail
objMessage.Configuration.Fields.Update
objMessage.Send

Hope this helps you! Enjoy!

Edit: Ahh one more thing a service status of 4 means the service is running, a service status of 1 means it's not. I'm not sure what 2 or 3 means but I'm willing to bet they are stopping/starting.

1
ответ дан 29 November 2019 в 03:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: