Kiểm tra SQL Server bằng Windows PowerShell – Phần 1
Muthusamy
Quản trị mạng - Phần 1 của loạt bài này chúng tôi đã giới thiệu cho các bạn cách ping đến host, đó chính là kiểm tra đầu tiên trên SQL Server. Kiểm tra quan trọng thứ hai ở mức hệ điều hành là xem xem tất cả các dịch vụ Windows có liên quan đến SQL Server trên host hiện có đang hoạt động hay không và báo cáo về trạng thái của hệ thống.
Phần 2 này sẽ giới thiệu cho các bạn cách truy cập vào dịch vụ Windows trên máy từ xa bằng cách sử dụng Windows PowerShell và WMI-Object.
Bước 1
Đánh hoặc copy và paste đoạn mã dưới đây vào file C:\CheckSQLServer\CheckServices.ps1.
# Function to check windows services related to SQL Server
Function checkservices ([string] $Hostname )
{
$Services=get-wmiobject -class win32_service
↪-computername $hostname|
↪where {$_.name -like '*SQL*'}| select-object
Name,state,status,Started,Startname,Description
foreach ( $service in $Services)
{
if($service.state -ne "Running" -or $service.status -ne "OK"
↪-or $service.started -ne "True" )
{
$message="Host="+$Hostname+" " +$Service.Name +"
↪"" +$Service.state +" +$Service.status +"
↪" +$Service.Started +" " +$Service.Startname
write-host $message -background "RED" -foreground "BLACk"
}
else
{
$message="Host="+$Hostname+" " +$Service.Name +"
↪" +$Service.state +" " +$Service.status +"
↪" +$Service.Started +" " +$Service.Startname
write-host $message -background "GREEN" -foreground "BLACk"
}
}
}
Bước 2
Bổ sung thêm vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đoạn mã dưới đây:
. ./checkservices.ps1
Lúc này C:\CheckSQLServer\CheckSQL_Lib.ps1 sẽ có cả pinghost và dịch vụ kiểm tra (checkservices) như thể hiện bên dưới.
#Source all the functions relate to CheckSQL
. ./PingHost.ps1
. ./checkservices.ps1
Lưu ý: File CheckSQL_Lib.ps1 này sẽ được cập nhật nguồn của các kịch bản bản mới giống như checkservices.PS1
Bước 3
Gắn vào file C:\CheckSQLServer\CheckSQLServer.ps1 bằng cách copy và paste đoạn mã dưới đây.
checkservices $Hostname
Lúc này file C:\CheckSQLServer\CheckSQLServer.ps1 sẽ có cả pinghost và checkservices như thể hiện bên dưới. Chúng ta đã thêm vào một số tuyên bố để hiện toàn bộ quá trình.
#Objective: To check various status of SQL Server
#Host, instances and databases.
#Author: MAK
#Date Written: June 5, 2008
param (
[string] $Hostname
)
. ./CheckSQL_Lib.ps1
Write-host "Checking SQL Server....."
Write-host "........................"
Write-host " "
Write-host "Arguments accepted : $Hostname"
write-host "........................"
Write-host "Pinging the host machine"
write-host "........................"
PingHost $Hostname
Write-host "Checking windows services on the host related to SQL Server"
write-host "..........................................................."
checkservices $Hostname
Lưu ý: CheckSQLServer.ps1 này sẽ được cập nhật các điều kiện mới và cũng như các tham số trong các cài đặt sau của loạt bài này.
Nguồn dẫn cơ bản load các chức năng được liệt kê trong file kịch bản và làm cho nó hiện hữu trong toàn bộ PowerShell session. Trong trường hợp này, chúng ta đang dẫn nguồn cho một kịch bản.
Bước 4
Hãy thực thi kịch bản CheckSQLServer.ps1 bằng việc chuyển host “Powerpc” như một đối số, xem thể hiện bên dưới.
./CheckSQLServer.ps1 PowerPC
Bạn sẽ có được các kết quả như thể hiện bên dưới (xem hình 1.0)
Checking SQL Server.....
........................
Arguments accepted : PowerPC
........................
Pinging the host machine
........................
PowerPC is REACHABLE
Checking windows services on the host related to SQL Server
...........................................................
Host=PowerPC msftesql$SQL2008 Stopped OK False .\mak
Host=PowerPC MSSQL$NY0QD1 Running OK True .\mak
Host=PowerPC MSSQL$SQL2008 Stopped OK False .\mak
Host=PowerPC MSSQLServerADHelper100 Stopped OK False NT AUTHORITY\NETWORK SERVICE
Host=PowerPC SQLAgent$NY0QD1 Stopped OK False .\mak
Host=PowerPC SQLAgent$SQL2008 Stopped OK False .\mak
Host=PowerPC SQLBrowser Stopped OK False NT AUTHORITY\LOCAL SERVICE
Host=PowerPC SQLWriter Running OK True LocalSystem
Hình 1.0
Từ kết quả bạn có thể thấy được rằng bất kỳ SQL Server nào có liên quan tới dịch vụ đều không được khởi tạo hoặc được đánh dấu trạng thái “OK” màu đỏ và tất cả các dịch vụ liên quan đến SQL Server đang hoạt động được đánh dấu màu xanh.
Bước 5
Chúng ta hãy thực thi kịch bản trên máy tính không tồn tại như thể hiện bên dưới.
./CheckSQLServer.ps1 TestMachine
Khi đó bạn sẽ nhận được kết quả như thể hiện dưới đây (xem hình 1.1)
Kết quả
Checking SQL Server.....
........................
Arguments accepted : TestMachine
........................
Pinging the host machine
........................
TestMachine is NOT reachable
Checking windows services on the host related to SQL Server
...........................................................
Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)
At C:\checksqlserver\checkservices.ps1:5 char:24
+ $Services=get-wmiobject <<<< -class win32_service -computername $hostname| where {$_.name -like '*SQL*'}| select-obj
ect Name,state,status,Started,Startname,Description
Host=TestMachine
Hình 1.1
Nếu bạn bắt gặp lỗi “Get-WmiObject : The RPC server is unavailable. (Exception from HRESULT: 0x800706BA)” thì nguyên nhân có thể là một số lý do dưới đây:
- Host không hiện hữu (ví dụ: bước 5)
- Tường lửa khóa chặn tính năng quản trị từ xa
Nếu bạn muốn vô hiệu hóa tường lửa, hãy thực thi lệnh dưới đây tại nhắc lệnh:
netsh.exe firewall set service type=REMOTEADMIN mode=ENABLE scope=ALL
Nếu muốn giữ các thiết lập tường lửa và chỉ cho phép các cổng được yêu cầu đối với quản trị từ xa, hãy thực thi đoạn mã dưới đây:
netsh firewall add portopening protocol=tcp port=135 name=DCOM_TCP135
- Dịch vụ Windows Management Instrumentation không hoạt động: Thiết lập dịch vụ WMI chạy tự động và sau đó khởi tạo dịch vụ
- Add người dùng hiện hành vào DCOM users.
Kết luận
Phần thứ hai này chúng ta đã được giới thiệu về cách truy cập dịch vụ Windows Service trên máy từ xa bằng Windows PowerShell và WMI-Object. Trong phần tiếp theo của loạt bài, chúng tôi sẽ bổ sung thêm các kiểm tra khác để chúng ta không phải thực hiện tất cả các kiểm tra nếu ping bị thất bại. Thêm vào đó chúng tôi sẽ giới thiệu cách capture một số thông tin phần cứng và hệ điều hành.