الأمر النوافذ للحصول على حالة الخدمة؟
-
03-07-2019 - |
سؤال
ولست بحاجة لمعرفة حالة الخدمة في نهاية بلدي دفعة السيناريو الذي إعادة تشغيل الخدمات باستخدام "صافي وقف 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
وبالطبع القائمة فقط تشغيل الخدمات، أنا لا أعرف أي شبكة الطريقة يمكن سرد لا تعمل الخدمات ...
ويساعد هذا الأمل!