#Function to check Hardware information from a host Function checkhardware[string] $Hostname { $computer=get-wmiobject -class win32_computersystem -computername $hostname -errorvar
Trang 1Kiểm tra SQL Server bằng Windows PowerShell – Phần 3
Phần trước của loạt bài này đã giới thiệu cho các bạn kiểm tra đầu tiên về SQL Server—cách ping một host Trong phần 2 là giới thiệu về cách kiểm tra tất cả các dịch vụ của Windows có liên quan với SQL Server Trong phần 3 này chúng tôi sẽ giới thiệu về cách tìm một số thông tin về phần cứng và hệ điều hành
từ máy host
Bước 1
Đánh hoặc Copy và paste đoạn mã bên dưới vào file C:\CheckSQLServer\Checkhardware.ps1
#Function to check Hardware information from a host
Function checkhardware([string] $Hostname )
{
$computer=get-wmiobject -class win32_computersystem -computername
$hostname -errorvariable errorvar
$errorvar.size
if (-not $errorvar)
{
$message="Host="+$Hostname
write-host $message -background "GREEN" -foreground "BLACk"
$message="Description=" +$computer.Description
write-host $message -background "GREEN" -foreground "BLACk"
$message="NumberOfLogicalProcessors="+
$computer.NumberOfLogicalProcessors
write-host $message -background "GREEN" -foreground "BLACk"
$message="NumberOfProcessors="+ $computer.NumberOfProcessors
write-host $message -background "GREEN" -foreground "BLACk"
$message="TotalPhysicalMemory=" +$computer.TotalPhysicalMemory
write-host $message -background "GREEN" -foreground "BLACk"
$message="Model=" +$computer.Model
write-host $message -background "GREEN" -foreground "BLACk"
$message="Manufacturer=" +$computer.Manufacturer
write-host $message -background "GREEN" -foreground "BLACk"
$message="PartOfDomain="+ $computer.PartOfDomain
write-host $message -background "GREEN" -foreground "BLACk"
$message="CurrentTimeZone=" +$computer.CurrentTimeZone
write-host $message -background "GREEN" -foreground "BLACk"
$message="DaylightInEffect="+$computer.DaylightInEffect
write-host $message -background "GREEN" -foreground "BLACk"
}
}
Trang 2Bước 2
Đánh hoặc Copy và paste đoạn mã bên dưới vào file C:\CheckSQLServer\CheckOS.ps1
#Function to check the OS information on the host machine
Function checkOS([string] $Hostname )
{
$os=get-wmiobject -class win32_operatingsystem -computername $hostname -errorvariable errorvar
if (-not $errorvar)
{
$message= "OSArchitecture="+$os.OSArchitecture
write-host $message -background "GREEN" -foreground "BLACk"
$message= "OSLanguage="+$os.OSLanguage
write-host $message -background "GREEN" -foreground "BLACk"
$message= "OSProductSuite="+$os.OSProductSuite
write-host $message -background "GREEN" -foreground "BLACk"
$message= "OSType="+$os.OSType
write-host $message -background "GREEN" -foreground "BLACk"
$message= "BuildNumber="+$os.BuildNumber
write-host $message -background "GREEN" -foreground "BLACk"
$message= "BuildType="+$os.BuildType
write-host $message -background "GREEN" -foreground "BLACk"
$message= "Version="+$os.Version
write-host $message -background "GREEN" -foreground "BLACk"
$message= "WindowsDirectory="+$os.WindowsDirectory
write-host $message -background "GREEN" -foreground "BLACk"
$message= "PlusVersionNumber="+$os.PlusVersionNumber
write-host $message -background "GREEN" -foreground "BLACk"
$message= "FreePhysicalMemory="+$os.FreePhysicalMemory
write-host $message -background "GREEN" -foreground "BLACk"
$message= "FreeSpaceInPagingFiles="+$os.FreeSpaceInPagingFiles
write-host $message -background "GREEN" -foreground "BLACk"
$message= "FreeVirtualMemory="+$os.FreeVirtualMemory
write-host $message -background "GREEN" -foreground "BLACk"
$message= "PAEEnabled="+$os.PAEEnabled
write-host $message -background "GREEN" -foreground "BLACk"
}
}
Bước 3
Gắn thêm vào file C:\CheckSQLServer\CheckSQL_Lib.ps1 đoạn mã bên dưới
./checkhardware.ps1
./checkOS.ps1
Trang 3Lúc này file C:\CheckSQLServer\CheckSQL_Lib.ps1 sẽ có pinghost, checkservices,
checkhardware và checkOS như thể hiện bên dưới
#Source all the functions relate to CheckSQL
./PingHost.ps1
./checkservices.ps1
./checkhardware.ps1
./checkOS.ps1
Lưu ý: File CheckSQL_Lib.ps1 này sẽ được cập nhật từ các kịch bản mới như
checkhardware.ps1 và checkOS.ps1
Bước 4
Gắn thêm vào file C:\CheckSQLServer\CheckSQLServer.ps1 đoạn mã dưới đây
checkhardware $Hostname
checkOS $Hostname
Lúc này file C:\CheckSQLServer\CheckSQLServer.ps1 sẽ có cả checkhardware và checkOS như bên dưới, Chúng tôi đã thêm môt tuyên bố write-host để 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
Write-host "Checking hardware Information "
Write-host " "
checkhardware $Hostname
Write-host "Checking OS Information "
Trang 4Write-host " "
checkOS $Hostname
Lưu ý: File CheckSQLServer.ps1 này sẽ được cập nhật các điều kiện và các tham số mới trong các phần sau của loạt bài
Nguồn dẫn sẽ load các hàm đượ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 tôi dẫn nguồn một kịch bản, kịch bản này sẽ lại lấy nguồn từ nhiều kịch bản khác
Bước 5
Lúc này chúng ta hãy thực thi kịch bản, CheckSQLServer.ps1 bằng cách passing “Powerpc” host với tư cách một đối số như thể hiện bên dưới
./CheckSQLServer.ps1 PowerServer2
Khi đó kết quả cho ra sẽ như sau (tham khảo hình 1.0)
Checking SQL Server
Arguments accepted : PowerServer2
Pinging the host machine
PowerServer2 is REACHABLE
Checking windows services on the host related to SQL Server
Host=PowerServer2 MSSQLSERVER Running OK True \Administrator
Host=PowerServer2 MSSQLServerADHelper100 Stopped OK False NT
AUTHORITY\NETWORK SERVICE
Host=PowerServer2 MSSQLServerOLAPService Stopped OK False \Administrator
Host=PowerServer2 SQLBrowser Stopped OK False NT AUTHORITY\LOCAL SERVICE
Host=PowerServer2 SQLSERVERAGENT Stopped OK False \Administrator
Host=PowerServer2 SQLWriter Stopped OK False LocalSystem
Checking hardware Information
Host=PowerServer2
Description=AT/AT COMPATIBLE
NumberOfLogicalProcessors=2
NumberOfProcessors=1
TotalPhysicalMemory=2145738752
Model=OptiPlex GX270
Manufacturer=Dell Computer Corporation
PartOfDomain=True
CurrentTimeZone=-240
Trang 5DaylightInEffect=True
Checking OS Information
OSArchitecture=32-bit
OSLanguage=1033
OSProductSuite=274
OSType=18
BuildNumber=6001
BuildType=Multiprocessor Free
Version=6.0.6001
WindowsDirectory=C:\Windows
PlusVersionNumber=
FreePhysicalMemory=1511144
FreeSpaceInPagingFiles=2402648
FreeVirtualMemory=3966452
PAEEnabled=False
Hình 1.0
Từ kết quả nhận được, bạn có thể thấy được các thông tin về phần cứng và hệ điều hành
Bước 6
Hãy thực thi kịch bản trên máy không tồn tại như dưới đây
Trang 6./CheckSQLServer.ps1 TestMachine
Khi đó kết quả nhận được sẽ như sau (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
Checking hardware Information
Get-WmiObject : The RPC server is unavailable (Exception from HRESULT: 0x800706BA)
At C:\checksqlserver\checkhardware.ps1:5 char:24
+ $computer=getwmiobject <<<< class win32_computersystem computername $hostname -errorvariable errorvar
Checking OS Information
Get-WmiObject : The RPC server is unavailable (Exception from HRESULT: 0x800706BA)
At C:\checksqlserver\checkOS.ps1:5 char:18
+ $os=getwmiobject <<<< class win32_operatingsystem computername $hostname -errorvariable errorvar
Trang 7Hình 1.1 Bước 7
Chúng ta không phải tiếp tục với checkservices, checkhardware và checkos nếu ping bị thất bại Chính vì vậy hãy cập nhật pinghost.ps1 như thể hiện bên dưới
Function Pinghost ([string] $Hostname )
{
$status=get-wmiobject win32_pingstatus -Filter "Address='$Hostname'" | Select-Object
statuscode
if($status.statuscode -eq 0)
{
write-host $Hostname is REACHABLE -background "GREEN" -foreground "BLACk"
}
else
{
$global:errorvar="host not reachable"
write-host $Hostname is NOT reachable -background "RED" -foreground "BLACk"
}
}
Hãy cập nhật checksqlserver.ps1 như thể hiện bên dưới
#Objective: To check various status of SQL Server
#Host, instances and databases
#Author: MAK
#Date Written: June 5, 2008
param (
[string] $Hostname
)
$global:errorvar=0
./CheckSQL_Lib.ps1
Write-host "Checking SQL Server "
Write-host " "
Trang 8Write-host " "
Write-host "Arguments accepted : $Hostname"
write-host " "
Write-host "Pinging the host machine"
write-host " "
pinghost $Hostname
if ($global:errorvar -ne "host not reachable")
{
Write-host "Checking windows services on the host related to SQL Server"
write-host " "
checkservices $Hostname
Write-host "Checking hardware Information "
Write-host " "
checkhardware $Hostname
Write-host "Checking OS Information "
Write-host " "
checkOS $Hostname
}
Lúc này hãy thực thi kịch bản bằng cách passing tên máy “testmachine”, tên thực sự không tồn tại với tư cách một đối số
./CheckSQLServer.ps1 TestMachine
Kết quả
Checking SQL Server
Arguments accepted : TestMachine
Pinging the host machine
TestMachine is NOT reachable
Lưu ý bạn có thể download các đọan mã mới nhất trong phần ba tại đây
Kết luận
Đây là phần thứ ba của loạt bài này Trong phần thứ ba này chúng tôi đã giới thiệu được cho các bạn cách truy cập các thông tin phần cứng và hệ điều hành bằng Windows PowerShell và WMI-Object Trong phần tiếp theo, chúng tôi sẽ bổ sung thêm một số kiểm tra khác và giới thiệu cách capture một số thông tin phần cứng và hệ điều hành