Bir hizmet listesini nasıl ayıklayabilirim ve hangi hesap olarak çalışırlar?


13

Bu sorunun vurgusu ikinci yarıda.

Tüm hizmetlerin bir listesini nasıl çıkaracağımı ve durumlarına nasıl filtre uygulayacağımı biliyorum. Ancak, ne yapacağım emin değilim hizmet "olarak çalıştırmak" olarak ayarlanmış kullanıcı hesabını ayıklamaktır.

Ben (ne yazık ki) PowerShell kullanma seçeneği yok bu yüzden yerel bir CMD yolu arıyorum. Ben sc sorgu komutunu kullanmak için bir yol olacağını varsaydı ama tüm bu listeleri:

SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT

İşletim Sistemi WIndows 2003 SP2 ve tüm hizmetler için bu bilgilere ihtiyacım var, bu yüzden her biri için manuel olarak yapmak zorunda kalırsam uzun soluklu bir işlemdir.

Yanıtlar:


20

wmic:
Tüm hizmetlerin adı ve hesabı:
wmic service get name,startname

yalnızca başlatılan hizmetler:
wmic service where started=true get name, startname

adında belirli bir desene sahip hizmetler:
wmic service where 'name like "%sql%"' get name, startname

html tablosu olarak güzel biçimlendirilmiş (ve daha sonra tarayıcınızda açılmıştır):
(wmic service where 'name like "%sql%"' get name, startname /format:htable >out.html) && out.html

Tam sözdizimi burada: https://msdn.microsoft.com/en-us/library/aa394531%28v=vs.85%29.aspx


Arasındaki fark nedir sc queryve wmic?
Pacerier

1
@Pacerier Neye göre fark var? Onlar sadece hizmetler sorgulamak / etkileşim sağlayan farklı (cmd hattı) araçları; sc sadece bu amaç için kullanılırken wmic daha geneldir (sistemin çeşitli bölümlerini sorgulamasına izin verdiği için). wmic de bu özel sorun için kullanımı daha kolaydır (sadece bir sorgu)
wmz

5

Bunu iki adımda gerçekleştirebilirsiniz:

  1. Hizmetlerin listesini alın:sc \\localhost query | findstr SERVICE_NAME
  2. Eksik parçanız: sc \\localhost qc+ SERVICE_NAME +| findstr SERVICE_START_NAME

Ben böyle bir toplu komut tavsiye ederim:

@echo off
setlocal EnableDelayedExpansion
sc \\localhost query | findstr SERVICE_NAME > services.lst
for /f "tokens=1,2" %%A in (services.lst) do (
    echo %%B
    sc \\localhost qc %%B | findstr SERVICE_START_NAME
)
del services.lst

Bu size şöyle bir çıktı verir: resim açıklamasını buraya girin

Tabii ki, bu çıktıyı daha fazla temizleyebilir veya bir CSV dosyasına istediğiniz şekilde yazabilirsiniz.


1

CMD'nin bunu yapmanın doğal bir yolu yoktur. SC ve NET, Windows ile birlikte gelen yerleşik uygulamalardır, ancak bu yerel oldukları anlamına gelmez. Herhangi bir zamanda bir yönetici bunları kaldırabilir ve daha sonra CMD bile karanlıkta bırakılabilir.

sc sdshow size güvenlik tanımlayıcılarını getirecek olan şeydir, ancak SDDL dizelerini nasıl okuyacağınızı bilmiyorsanız bu durum karmaşıklaşacaktır.

En basit yolu Sysinternals PsService.exe'yi Araçlar paketinden almak ve psservice güvenliği [hizmet] olarak kullanmaktır. SDDL'yi hesap adları da dahil olmak üzere okunabilir biçimde listeler.


"Bunu yapmak için yerel bir yol yok" ile ne demek istiyorsun? C:\Windows\System32\sc.exePencerelerin tüm sürümleri için değil mi?
Pacerier

Yeniden oku. Yerleşik, CMD gibi çıkarılamayan anlamına gelir. Bir yönetici PowerShell'i devre dışı bırakırsa, sc ve net'i de devre dışı bırakabilir. En basit yol, varsayılan olarak hepsini yapan ve işletim sistemine bağlı olmayan taşınabilir bir uygulama kullanmaktır.
JasonXA

1

PowerShell'i kullanamasanız da, bilgileri WMI'dan almak için VBScript'i kullanabilmeniz gerekir:

İşte tüm hizmetleri ve başladıkları hesabı listeleyecek bir VBS betiği:

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service")

For Each objService in colServices 
    wscript.echo objService.Name & ": " & objService.StartName
Next

Kaydedin ve ardından ile çalıştırın cscript ScriptName.vbs.

objService.State size hizmetin mevcut durumunu verir (buna göre filtrelemek istediğinizi belirttiğinizden).

Win32_Service sınıfı hakkında daha fazla bilgi .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.