سؤال

ولست بحاجة لمعرفة حالة الخدمة في نهاية بلدي دفعة السيناريو الذي إعادة تشغيل الخدمات باستخدام "صافي وقف thingie" و "صافي بداية thingie".

في بلدي عالم مثالي المفضل لمعظم، أود أن البريد الإلكتروني الدولة لنفسي، لقراءة في ليالي الشتاء الباردة، لطمأنة نفسي مع الدفء والراحة من الخادم وأنا أعلم أن يشغل الحق.

وفقط بالنسبة لك أن تعرف، أنا باستخدام ملقم 2003 منصة ويندوز، وملف دفعي يبدو الخيار الافضل. أنا لا أمانع باستخدام شيء آخر، وستكون مفتوحة للغاية لتلقي الاقتراحات، ولكن فقط من أجل المعرفة (كما غيبوبة تشتهي العقول، فكرت، لماذا لا تضخيم بلدي)، وهناك أمر يتيح لي الفرصة لتحقق عن حالة الخدمة، في سطر الأوامر؟

وأود أن مجرد توجيه إخراج الأمر إلى ملف؟

وأين هي الجحيم سروالي؟ (يا إلهي، أنا حقا آمل أن النكتة إدراجها في هذا لن يشتم أحدا من صباح اليوم الأربعاء، والفكاهة كنني بحاجة أيضا: P)

[تحرير]: الحل I المستخدمة هي (لم يعد) متوفرة للتحميل من --اربط منقحة -

ويستخدم كأداة مهمة من المقرر أن يتم تنفيذها خلال الليل، والتحقق من البريد الإلكتروني الخاص بي في الصباح، ومعرفة ما إذا كان أو لم يكن الخدمة وإعادة تشغيل بشكل صحيح.

هل كانت مفيدة؟

المحلول

وعن طريق سيناريو ويندوز:

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

ويمكنك بسهولة تصفية ما سبق لخدمة معينة تريد.

نصائح أخرى

هل حاولت 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

لاحظ أن داخل ملف دفعي كنت مضاعفة كل علامة في المئة.

ويمكنك الاتصال net start "service name" في خدمتكم. إذا ليست التي عليه، سوف تشغيله والعودة ERRORLEVEL = 0، لو كان بدأ بالفعل انها سوف تعود ERRORLEVEL = 2.

pstools - ولا سيما <لأ href = "HTTP: //technet.microsoft.com/en-us/sysinternals/bb897542.aspx "يختلط =" noreferrer "> psservice و" استعلام "- على سبيل المثال:

psservice query "serviceName"

ونظرة أيضا: انت هنا

وNET START | البحث عن "اسم الخدمة"> NUL    IF ERRORLEVEL 1 ECHO الخدمة ليست قيد التشغيل

ونسخ فقط من: http://ss64.com/nt/sc.html

إذا بوويرشيل هو متاح لك ...

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

وسوف اعطيكم ...

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

ويمكنك استبدال **** **** الشبكة مع اسم خدمة معينة إذا كنت بحاجة فقط للتأكد من خدمة واحدة.

وربما هذا يمكن أن يكون أفضل طريقة لبدء الخدمة والتحقق من نتيجة

وبالطبع من داخل دفعة مثل FILE.BAT وضع شيء مثل هذا المثال ولكن مجرد استبدال "NameOfSercive" مع اسم الخدمة التي تريد واستبدال خطوط REM مع التعليمات البرمجية الخاصة بك:

@ECHO OFF

REM Put whatever your Batch may do before trying to start the service

net start NameOfSercive 2>nul
if errorlevel 2 goto AlreadyRunning
if errorlevel 1 goto Error

REM Put Whatever you want in case Service was not running and start correctly

GOTO ContinueWithBatch

:AlreadyRunning
REM Put Whatever you want in case Service was already running
GOTO ContinueWithBatch

:Error
REM Put Whatever you want in case Service fail to start
GOTO ContinueWithBatch

:ContinueWithBatch

REM Put whatever else your Batch may do

وشيء آخر هو للتحقق من حالته دون تغيير، لذلك هناك طريقة أكثر بساطة بكثير للقيام بذلك، فقط تشغيل:

net start

وكما أنه بدون المعلمات وسوف تظهر قائمة مع كافة الخدمات التي تم تشغيلها ...

وهكذا فإن البقرى بسيط أو العثور بعد ذلك على الأنابيب من شأنها أن تناسب ...

وبالطبع من داخل دفعة مثل FILE.BAT وضع شيء مثل هذا المثال ولكن مجرد استبدال "NameOfSercive" مع اسم الخدمة التي تريد واستبدال خطوط REM مع التعليمات البرمجية الخاصة بك:

@ECHO OFF

REM Put here any code to be run before check for Service

SET TemporalFile=TemporalFile.TXT
NET START | FIND /N "NameOfSercive" > %TemporalFile%
SET CountLines=0
FOR /F %%X IN (%TemporalFile%) DO SET /A CountLines=1+CountLines
IF 0==%CountLines% GOTO ServiceIsNotRunning

REM Put here any code to be run if Service Is Running

GOTO ContinueWithBatch

:ServiceIsNotRunning

REM Put here any code to be run if Service Is Not Running

GOTO ContinueWithBatch
:ContinueWithBatch
DEL -P %TemporalFile% 2>nul
SET TemporalFile=

REM Put here any code to be run after check for Service

وهذا الأمل يمكن أن تساعد !! هذا ما يمكنني استخدام بشكل طبيعي.

وحسنا أرى "نيك Kavadias" أقول هذا:

<اقتباس فقرة>   

و"وفقا لهذا http://www.computerhope.com/nethlp.htm في هذا الشأن يجب أن يكون NET START / LIST ... "

إذا كنت اكتب في نظام التشغيل Windows XP هذا:

NET START /LIST

وسوف تحصل على خطأ، فقط اكتب بدلا

NET START

ووLIST / هي فقط ل Windows 2000 ... إذا كنت تقرأ هذا تماما على شبكة الإنترنت من شأنه أن ترى / LIST هي فقط على المقطع Windows 2000.

ويساعد هذا الأمل!

وكان في نيتي أن إنشاء برنامج نصي الذي يتحول خدمات ON و OFF (في 1 النصي)

<اقتباس فقرة>
net start NameOfSercive 2>nul
if errorlevel 2 goto AlreadyRunning
if errorlevel 1 goto Error
     

...

وساعد الكثير !! TYVM z666

ولكن عندما على سبيل المثال يتم تعطيل الخدمة (أيضا ERRORLEVEL = 2؟) فإنه يذهب إلى "AlreadyRuning" ولا يأتي أبدا إلى

<اقتباس فقرة>
if errorlevel 1 goto Error  ?!!

وأردت الناتج عن هذه الحالة ...

<اقتباس فقرة>
 :AlreadyRunning
 net stop NameOfSercive
 if errorlevel 1 goto Error


 :Error
 Echo ERROR!!1!
 Pause

وبلدي 2 سنتا، ونأمل أن يساعد هذا

وحسنا أنا لست متأكدا ما إذا كان يمكنك إرسال بريد إلكتروني إلى نتائج هذا من ملف دفعة واحدة. إذا جاز لي أن جعل اقتراح بديل من شأنه أن يحل فبسكريبت مشكلتك. أنا بعيد عن عظيم مع VBScript ولكن يمكنك استخدامه للاستعلام عن الخدمات التي تعمل على الجهاز المحلي. البرنامج النصي أدناه البريد الالكتروني لك وضع جميع الخدمات التي تعمل على الجهاز يحصل على تشغيل البرنامج النصي على. فأنت تريد من الواضح لاستبدال خادم SMTP وعنوان البريد الإلكتروني. إذا كنت جزءا من مجال وتشغيل هذا البرنامج النصي كمستخدم متميز (أنها يجب أن تكون مسؤولا على الجهاز البعيد) يمكنك الاستعلام الأجهزة البعيدة وكذلك من خلال استبدال المضيف المحلي مع 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

وآمل أن يساعد هذا لك! استمتع!

وتحرير: الخبر أكثر شيء واحد في حالة الخدمة من 4 يعني تشغيل الخدمة، وهي حالة الخدمة من 1 يعني أنه ليس كذلك. لست متأكدا ما أو 2 أو 3 وسيلة ولكن أنا على استعداد للمراهنة على أنها وقف / بدء.

وفقا لهذا http://www.computerhope.com/nethlp.htm في هذا الشأن يجب أن يكون NET START / LIST ولكن لا أستطيع الحصول عليه للعمل عليها مربع XP. أنا متأكد من أن هناك بعض WMI من شأنها أن تعطيك القائمة.

وروس رمز ط الرد هو أيضا لمعرفة كيفية تشغيل العديد من الخدمات ...

وتخيل أنك تريد أن تعرف كم هي الخدمات مثل أوراكل * ثم قمت بوضع أوراكل بدلا من NameOfSercive ... وتحصل على عدد من الخدمات مثل أوراكل * يعمل على متغير٪ CountLines٪، وإذا كنت تريد أن تفعل شيئا إذا هناك 4 فقط يمكنك أن تفعل شيئا من هذا القبيل:

إذا 4 ==٪ CountLines٪ GOTO FourServicesAreRunning

وهذا هو أكثر من ذلك بكثير قوية ... والشفرة لا يسمح لك أن تعرف إذا الخدمة المطلوبة قيد التشغيل ... إذا كان هناك آخر srecive بدءا نفس الاسم ... تخيل: -ServiceOne -ServiceOnePersonal

إذا كنت تبحث عن ServiceOne، ولكن كان يعمل فقط ServiceOnePersonal أكواد سوف اقول وServiceOne تشغيل ...

ورمزي يمكن تغييرها ياسلي، لأنه يقرأ جميع الخطوط من ملف وخط قراءتها من قبل خط يمكن القيام به أيضا كل ما تريد أن لكل خدمة ... الاطلاع على:

@ECHO OFF
REM Put here any code to be run before check for Services

SET TemporalFile=TemporalFile.TXT
NET START > %TemporalFile%
SET CountLines=0
FOR /F "delims=" %%X IN (%TemporalFile%) DO SET /A CountLines=1+CountLines
SETLOCAL EnableDelayedExpansion
SET CountLine=0
FOR /F "delims=" %%X IN (%TemporalFile%) DO @(
 SET /A CountLine=1+CountLine

 REM Do whatever you want to each line here, remember first and last are special not service names

 IF 1==!CountLine! (

   REM Do whatever you want with special first line, not a service.

 ) ELSE IF %CountLines%==!CountLine! (

   REM Do whatever you want with special last line, not a service.

 ) ELSE (

   REM Do whatever you want with rest lines, for each service.
   REM    For example echo its position number and name:

   echo !CountLine! - %%X

   REM    Or filter by exact name (do not forget to not remove the three spaces at begining):
   IF "   NameOfService"=="%%X" (

     REM Do whatever you want with Service filtered.

   )
 )

 REM Do whatever more you want to all lines here, remember two first are special as last one

)

DEL -P %TemporalFile% 2>nul
SET TemporalFile=

REM Put here any code to be run after check for Services

وبالطبع القائمة فقط تشغيل الخدمات، أنا لا أعرف أي شبكة الطريقة يمكن سرد لا تعمل الخدمات ...

ويساعد هذا الأمل!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top