Bạn có thể quản lý các dịch vụ Windows không chỉ từ công cụ dòng lệnh services.msc snap-in hoặc sc.exe mà còn bằng PowerShell. Trong bài viết này, chúng tôi sẽ xem xét các tình huống khác nhau của việc quản lý các dịch vụ Windows bằng PowerShell.
PowerShell Cmdlets được sử dụng để quản lý các dịch vụ Windows
Có tám lệnh ghép ngắn Dịch vụ cơ bản để xem trạng thái của các dịch vụ Windows và quản lý chúng. Để có danh sách đầy đủ các lệnh ghép ngắn quản lý dịch vụ, hãy chạy lệnh sau:
Get-Help \*-Service
- Nhận Dịch vụ - cho phép nhận các dịch vụ trên máy tính cục bộ hoặc máy tính từ xa cả ở trạng thái đang chạy hoặc đã dừng;
- Dịch vụ mới - tạo ra một dịch vụ. Lệnh ghép ngắn tạo một mục nhập mới cho dịch vụ Windows trong sổ đăng ký và trong cơ sở dữ liệu dịch vụ;
- Khởi động lại-Dịch vụ - khởi động lại một dịch vụ. Lệnh ghép ngắn gửi thông báo khởi động lại thông qua Bộ điều khiển dịch vụ Windows;
- Tiếp tục-Dịch vụ - tiếp tục một dịch vụ. Lệnh ghép ngắn gửi thông báo tiếp tục đến Trình quản lý dịch vụ Windows;
- Set-Service - thay đổi cài đặt của một dịch vụ cục bộ hoặc từ xa, bao gồm trạng thái, mô tả, tên hiển thị hoặc chế độ khởi động. Bạn cũng có thể sử dụng lệnh ghép ngắn này để bắt đầu, dừng hoặc tạm ngừng một dịch vụ;
- Dịch vụ Bắt đầu - bắt đầu một dịch vụ;
- Dừng Dịch vụ - dừng một dịch vụ (lệnh ghép ngắn gửi thông báo dừng đến Trình quản lý dịch vụ Windows);
- Tạm ngưng dịch vụ - đình chỉ một dịch vụ. Dịch vụ bị tạm ngưng vẫn đang chạy nhưng nó không hoạt động gì cho đến khi được tiếp tục lại bằng cách sử dụng (ví dụ:với lệnh ghép ngắn Tiếp tục-Dịch vụ).
Bạn có thể nhận được mô tả chi tiết và ví dụ về cách sử dụng một lệnh ghép ngắn cụ thể với Get-Help:
Get-Help Start-Service
Làm cách nào để Kiểm tra Trạng thái Dịch vụ của Windows bằng Get-Service?
Bạn có thể nhận danh sách các dịch vụ và trạng thái của chúng (Đang chạy / Đã dừng) trên máy tính cục bộ hoặc từ xa bằng cách sử dụng Nhận dịch vụ cmdlet. - Tên tham số cho phép chọn dịch vụ theo tên. Tên dịch vụ có thể được chỉ định bằng cách sử dụng ký tự đại diện *
.
Nếu bạn không biết chính xác tên dịch vụ, bạn có thể tìm nó theo tên hiển thị của nó bằng cách sử dụng - Tên hiển thị tham số. Bạn có thể sử dụng danh sách các giá trị và ký tự đại diện.
Sử dụng Nhận dịch vụ lệnh ghép ngắn với -ComputerName tham số để nhận trạng thái dịch vụ trên máy tính từ xa. Bạn có thể truy vấn trạng thái dịch vụ trên nhiều máy tính từ xa cùng một lúc bằng cách chỉ định tên của chúng được phân tách bằng dấu phẩy. Ví dụ:lệnh hiển thị bên dưới nhận trạng thái dịch vụ Bộ đệm trên các máy tính từ xa ny-prnt1 và ny-prnt2.
Get-Service spooler –ComputerName ny-prnt1,ny-prnt2
Status Name DisplayName ------ ---- ----------- Running spooler Print Spooler Stopped spooler Print Spooler
Để hiển thị tất cả các thuộc tính của một dịch vụ, hãy sử dụng Chọn đối tượng lệnh ghép ngắn:
Get-Service spooler | Select-Object *
Lệnh ghép ngắn Select-Object cho phép lấy các thuộc tính cụ thể của một dịch vụ. Ví dụ:bạn muốn xem tên, trạng thái và các tùy chọn khả dụng của dịch vụ Bộ đệm:
Get-Service Spooler | Select DisplayName,Status,ServiceName,Can*
Nhận dịch vụ cmdlet có hai tham số cho phép bạn xem các phụ thuộc dịch vụ:
- -DependentServices cho phép hiển thị các dịch vụ phụ thuộc vào dịch vụ đã cho
- -RequiredServices hiển thị các dịch vụ mà dịch vụ nhất định phụ thuộc vào
Lệnh sau hiển thị các dịch vụ cần thiết để khởi động dịch vụ Bộ đệm:
Get-Service –Name Spooler -RequiredServices
Lệnh sau hiển thị các dịch vụ phụ thuộc vào Spooler:
Get-Service –Name Spooler -DependentServices
Nếu bạn muốn tìm các dịch vụ có trạng thái hoặc thông số cụ thể, hãy sử dụng Đối tượng ở đâu cmdlet. Ví dụ:hãy lấy danh sách các dịch vụ đang chạy:
Get-Service | Where-Object {$_.status -eq 'running'}
Để hiển thị các dịch vụ với kiểu khởi động thủ công, hãy chạy lệnh sau:
Get-Service | Where-Object {$_.starttype -eq 'Manual'}
Sử dụng tập lệnh PowerShell sau để kiểm tra xem một dịch vụ Windows cụ thể có tồn tại trên máy tính hiện tại hay không:
if (Get-Service "ServiceTest" -ErrorAction SilentlyContinue)
{
Write-host "ServiceTest exists"
}
Cách Dừng, Bắt đầu hoặc Khởi động lại Dịch vụ với PowerShell?
Bạn có thể dừng một dịch vụ bằng cách sử dụng Dừng dịch vụ cmdlet. Để dừng Bộ đệm, hãy chạy lệnh:
Stop-Service -Name spooler
Lệnh ghép ngắn Stop-Service không hiển thị bất kỳ thứ gì sau khi thực thi. Để xem kết quả, hãy sử dụng -PassThru tham số.
Xin lưu ý rằng không phải mọi dịch vụ đều có thể bị dừng. Nếu có bất kỳ dịch vụ phụ thuộc nào, bạn sẽ thấy lỗi:
Cannot stop service because it has dependent services. It can only be stopped if force flag set.
Để buộc dừng một dịch vụ, hãy sử dụng –Force tham số. Bạn nên nhớ rằng tất cả các dịch vụ phụ thuộc cũng sẽ ngừng:
Stop-Service samss –Force -Passthru
Lệnh sau sẽ dừng các dịch vụ được chỉ định (bit, bộ đệm) nếu chúng ở trạng thái "Đang chạy":
get-service bits,spooler | where {$_.status -eq 'running'} | stop-service –passthru
Đôi khi các dịch vụ bị treo ở trạng thái "Đang dừng" và buộc phải bị giết.
Dịch vụ bắt đầu cmdlet bắt đầu một dịch vụ đã dừng:
Start-Service -Name spooler -PassThru
Một dịch vụ sẽ không bắt đầu, nếu bất kỳ dịch vụ phụ thuộc nào của nó bị dừng. Để tìm và khởi động chúng, hãy sử dụng một lớp lót PowerShell sau:
get-service samss | Foreach { start-service $_.name -passthru; start-service $_.DependentServices -passthru}
Tạm ngưng dịch vụ lệnh ghép ngắn có thể tạm dừng các dịch vụ nếu chúng hỗ trợ trạng thái này. Để tìm hiểu xem một dịch vụ có thể bị tạm ngưng hay không, hãy sử dụng Nhận dịch vụ lệnh ghép ngắn với CanPauseAndContinue tài sản.
Get-Service samss | Format-List name, canpauseandcontinue
Để hiển thị danh sách tất cả các dịch vụ có thể bị tạm dừng, hãy chạy lệnh sau:
Get-Service | Where-Object {$_.canpauseandcontinue -eq "True"}
Hãy tạm ngừng dịch vụ SQLBrowser:
Suspend-Service -Name SQLBrowser
Để tiếp tục dịch vụ bị tạm ngưng, hãy sử dụng Dịch vụ tiếp tục lệnh ghép ngắn:
Resume-Service -Name SQLBrowser
Lệnh sau sẽ tiếp tục tất cả các dịch vụ bị tạm ngưng:
get-service | where-object {$_.Status -eq "Paused"} | resume-service
Dịch vụ khởi động lại lệnh ghép ngắn sẽ khởi động lại một dịch vụ:
Restart-Service -Name spooler
Lệnh này khởi động tất cả các dịch vụ mạng đã dừng trên máy tính:
get-service net* | where-object {$_.Status -eq "Stopped"} | restart-service
Các lệnh này không có - Tên máy tính nhưng bạn có thể chạy chúng trên một máy tính từ xa bằng lệnh ghép ngắn Invoke-Command hoặc một đường dẫn.
Ví dụ:để khởi động lại bộ đệm in trên máy tính từ xa ny-prnt1, hãy chạy lệnh:
Get-Service Spooler -ComputerName ny-prnt1 | Start-Service
Sử dụng Set-Service để Thay đổi Cài đặt Dịch vụ
Set-Service cmdlet cho phép bạn thay đổi bất kỳ thông số hoặc cài đặt nào của dịch vụ trên máy tính cục bộ hoặc máy tính từ xa. Vì trạng thái của một dịch vụ là một thuộc tính, bạn có thể sử dụng lệnh ghép ngắn này để bắt đầu, dừng hoặc tạm ngừng một dịch vụ. Set-Service có -StartupType tham số cho phép thay đổi kiểu khởi động của dịch vụ.
Hãy thay đổi kiểu khởi động Bộ đệm thành tự động:
Set-Service spooler –startuptype automatic –passthru
Bạn có thể đặt kiểu khởi động thủ công:
Set-Service spooler –startuptype manual –passthru
Cách tạo hoặc xóa dịch vụ Windows qua PowerShell?
Dịch vụ mới - là một lệnh ghép ngắn để tạo một dịch vụ mới trong Windows. Chỉ định tên và tệp thực thi cho dịch vụ mới (thậm chí bạn có thể chạy tập lệnh PowerShell dưới dạng dịch vụ Windows).
Hãy tạo một dịch vụ mới với tên TestSvc:
new-service -name TestSvc -binaryPathName "C:\WINDOWS\System32\svchost.exe -k netsvcs"
Nhận thông tin về kiểu khởi động và mô tả của dịch vụ bằng lệnh ghép ngắn Get-WmiObject.
get-wmiobject win32_service -filter "name='testservice'"
Bạn có thể thay đổi cài đặt của dịch vụ mới bằng lệnh sau:
Set-Service -Name TestSvc -Description ‘My Service’ -StartupType Manual
Để xóa một dịch vụ, hãy chạy lệnh sau:
(Get-WmiObject win32_service -Filter ″name=′TestSvc′″).delete()
Thay đổi Tài khoản Người dùng Chạy Dịch vụ Windows
Bạn có thể sử dụng PowerShell để thay đổi tài khoản người dùng được sử dụng để bắt đầu một dịch vụ. Lấy tên của tài khoản được sử dụng để bắt đầu TestSvc:
get-wmiobject win32_service -filter "name='TestSvc'" | Select name,startname
Để thay đổi tên người dùng và mật khẩu cho Dịch vụ Windows, hãy chạy các lệnh sau:
$svc = get-wmiobject win32_service -filter "name='TestSvc'"
$svc.GetMethodParameters("change")
Danh sách các tham số của phương thức Change () được hiển thị. Đếm vị trí của các tham số StartName và StartPassword:chúng nằm ở thứ 20 và 21 st địa điểm tương ứng.
$svc | Invoke-WmiMethod -Name Change –ArgumentList @ ($null,$null,$null,$null,$null,$null,$null, $null,$null,$null,$null,$null,$null,$null,$null,$null, $null,$null,$null,"Administrator","!123Pa$$w0rd")
Hoặc bạn có thể nhập tên của tài khoản gMSA (mật khẩu tài khoản không được chỉ định trong trường hợp này).
Như bạn có thể thấy, PowerShell giúp bạn dễ dàng quản lý các dịch vụ Windows. Bạn có thể tạo, dừng, bắt đầu hoặc tiếp tục các dịch vụ và thay đổi các thuộc tính của chúng. Hầu hết các lệnh ghép ngắn cho phép quản lý các dịch vụ trên máy tính từ xa.