Muthusamy
Quản trị mạng - Phần 1 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"
}
}
Bướ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
Lú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....."
Write-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
DaylightInEffect=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.
./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=get-wmiobject <<<< -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=get-wmiobject <<<< -class win32_operatingsystem -computername $hostname -errorvariable errorvar
Hì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 "........................"
Write-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.