Làm cách nào để trích xuất danh sách các dịch vụ VÀ tài khoản họ chạy như thế nào?


13

Sự nhấn mạnh của câu hỏi này là vào nửa thứ hai.

Tôi biết cách trích xuất danh sách tất cả các dịch vụ và cách lọc theo trạng thái của chúng. Tuy nhiên, điều tôi không chắc chắn làm thế nào là trích xuất tài khoản người dùng mà dịch vụ được đặt thành "chạy như".

Tôi không có tùy chọn sử dụng PowerShell (thật không may) vì vậy tôi đang tìm kiếm một cách riêng của CMD. Tôi giả sử sẽ có một cách để sử dụng lệnh truy vấn sc nhưng tất cả các danh sách đó là:

SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT

FYI - HĐH là WIndows 2003 SP2 và tôi cần thông tin này cho tất cả các dịch vụ vì vậy đây là một quá trình dài hơi nếu tôi phải thực hiện thủ công cho từng dịch vụ.

Câu trả lời:


20

wmic:
Tên và tài khoản cho tất cả các dịch vụ:
wmic service get name,startname

chỉ bắt đầu dịch vụ:
wmic service where started=true get name, startname

dịch vụ với mẫu cụ thể trong tên:
wmic service where 'name like "%sql%"' get name, startname

được định dạng độc đáo dưới dạng bảng html (và sau đó được mở trong trình duyệt của bạn):
(wmic service where 'name like "%sql%"' get name, startname /format:htable >out.html) && out.html

Cú pháp đầy đủ tại đây: https://msdn.microsoft.com/en-us/l Library / aa394531% 28v = vs85% 29.aspx


Sự khác biệt giữa sc queryvà là wmicgì?
Pacerier

1
@Pacerier Sự khác biệt liên quan đến những gì? Chúng chỉ là các công cụ (dòng cmd) khác nhau cho phép bạn truy vấn / tương tác với các dịch vụ; sc chỉ dành cho mục đích này, trong khi wmic thì tổng quát hơn (vì nó cho phép người ta truy vấn các phần khác nhau của hệ thống). wmic cũng dễ sử dụng hơn cho vấn đề cụ thể này (chỉ có một truy vấn)
wmz

5

Bạn có thể thực hiện việc này theo hai bước:

  1. Lấy danh sách các dịch vụ:sc \\localhost query | findstr SERVICE_NAME
  2. Phần còn thiếu của bạn: sc \\localhost qc+ SERVICE_NAME +| findstr SERVICE_START_NAME

Tôi muốn giới thiệu một tập lệnh bó như thế này:

@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

Điều đó mang lại cho bạn một đầu ra như thế này: nhập mô tả hình ảnh ở đây

Tất nhiên, bạn có thể dọn sạch thêm đầu ra hoặc ghi vào tệp CSV theo bất kỳ cách nào bạn muốn.


1

CMD không có cách riêng để làm điều đó SC và NET là các ứng dụng tích hợp đi kèm với Windows nhưng điều đó không có nghĩa là chúng là bản địa. Bất cứ lúc nào một quản trị viên có thể loại bỏ chúng và sau đó ngay cả CMD bị bỏ lại trong bóng tối.

sc sdshow là thứ sẽ giúp bạn có các mô tả bảo mật, nhưng điều này sẽ làm phức tạp mọi thứ nếu bạn không biết cách đọc các chuỗi SDDL.

Cách đơn giản nhất là lấy Sysiternals PsService.exe từ gói Công cụ và sử dụng nó làm bảo mật psservice [dịch vụ]. Nó sẽ liệt kê SDDL ở định dạng có thể đọc được, bao gồm cả tên tài khoản.


Bạn có ý nghĩa gì bởi "không có cách bản địa để làm điều đó"? Nó không có trong C:\Windows\System32\sc.exetất cả các phiên bản của windows?
Pacerier

Đọc lại lần nữa. Tích hợp sẵn có nghĩa là không thể tháo rời như CMD. Nếu quản trị viên vô hiệu hóa PowerShell, thì anh ta cũng có thể vô hiệu hóa sc và net. Cách đơn giản nhất là sử dụng một ứng dụng di động làm tất cả theo mặc định và không bị ràng buộc với HĐH.
JasonXA

1

Mặc dù bạn không thể sử dụng PowerShell, bạn vẫn có thể sử dụng VBScript để lấy thông tin từ WMI:

Đây là tập lệnh VBS sẽ liệt kê tất cả các dịch vụ và tài khoản mà chúng bắt đầu là:

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

Lưu nó và sau đó chạy nó với cscript ScriptName.vbs.

objService.State sẽ cung cấp cho bạn trạng thái hiện tại của dịch vụ (vì bạn đã đề cập đến việc bạn muốn lọc theo nó).

Thông tin thêm về lớp Win32_Service .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.