2014-06-27 11 views
25

Tôi có một dòng lệnh PowerShell script để trích xuất danh sách tất cả các dịch vụ đang chạy trên máy cục bộ của tôi, ngoài việc hiển thị "Trạng thái", " tên" và 'DisplayName' tôi cũng muốn hiển thị 'Đường dẫn đến thực thi'Làm thế nào tôi có thể trích xuất "Đường dẫn đến thực thi" của tất cả các dịch vụ bằng PowerShell

+0

Hoặc cũng chỉ là 'dịch vụ wmic lấy PathName'. Hoạt động trên dấu nhắc lệnh quá. – nawfal

Trả lời

35

tôi nghĩ rằng bạn sẽ cần phải nghỉ mát để WMI:

Get-WmiObject win32_service | ?{$_.Name -like '*sql*'} | select Name, DisplayName, State, PathName 

cập nhật Nếu bạn muốn thực hiện quá tôi thao tác trên dữ liệu được chọn, bạn có thể sử dụng các thuộc tính được tính như được mô tả here.

Ví dụ, nếu bạn chỉ muốn dòng chữ trong dấu ngoặc kép cho tên đường dẫn, bạn có thể chia vào dấu ngoặc kép và lấy mục mảng 1:

Get-WmiObject win32_service | ?{$_.Name -like '*sql*'} | select Name, DisplayName, @{Name="Path"; Expression={$_.PathName.split('"')[1]}} | Format-List 
+0

Cảm ơn, nhưng với "PathName", tôi không nhận được đường dẫn đầy đủ thay vì tôi nhận được một cái gì đó như 'C: \ Program Files (x86) \ Microsoft SQL S ...' 'E: \ apps \ MySQL \ MySQL Server 5.0 \ bin \ mys ... ' sau một số ký tự nhất định mà đường dẫn cắt ngắn, có cách nào để lấy đường dẫn đầy đủ không? –

+0

Có vẻ như một cái gì đó đã bị nhỡ khỏi nhận xét của bạn, tôi sẽ đoán rằng bạn đã hiển thị nó trên màn hình và đường dẫn đang được truy vấn. Hãy thử đường ống thông qua Format-List để xem đường dẫn đầy đủ. –

+0

Cảm ơn, tôi đã thử ** Format-List ** và nó hoạt động tốt. Tôi có thể cắt bớt một phần của con đường sau .exe? ví dụ '" C: \ Program Files (x86) \ Microsoft SQL Server \ MSSQL.3 \ MSSQL \ Binn \ sqlservr.exe "-sSQLEXPRESS' Tôi không cần một phần của đường dẫn sau .exe, tôi cần một cái gì đó như thế này '' C: \ Program Files (x86) \ Microsoft SQL Server \ MSSQL.3 \ MSSQL \ Binn \ sqlservr.exe "' Loại bỏ các dấu ngoặc kép phải tốt hơn nữa –

4

Một biến thể trên Query WMI rằng có thể nhanh hơn (Tôi chỉ phải làm việc này cho một khách hàng SCCM)

$SQLService=(get-wmiobject -Query 'Select * from win32_service where Name like "*SQL*"') | Select-object Name, DisplayName, State, Pathname 

Bí quyết khác là để bẫy cho kết quả nhiều SQL nếu bạn muốn tên con đường mà không có dấu ngoặc kép (do đó bạn có thể thao tác trên họ)

$SQLService | Select-Object Name, DisplayName, State, @{Name='PathName';Expression=$_.Pathname.replace('"','')} 

Lợi thế lớn khi sử dụng -query trong get-wmiobject (hoặc get-ciminstance) là tốc độ xử lý. Ví dụ cũ hơn nhận được một danh sách đầy đủ và sau đó các bộ lọc, trong khi sau này lấy một danh sách rất trực tiếp.

Chỉ cần thêm hai xu :)

Chúc mừng tất cả! Sean Công nghệ năng lượng

+0

Và một biến thể trên máy của bạn nhưng sử dụng -Filter thay vì -Query. Tôi hy vọng nó rất giống nhau dưới mui xe nhưng có thể là một phần nhỏ hơn gõ :-) 'Get-WmiObject win32_service -Filter 'Tên như"% SQL% "'' –

Các vấn đề liên quan