Microsoft Windows Power Shell và SQL Server 2005 SMO – Phần 4
Phn I và Phn II của loạt bài này đã ch dẫn các thiết lập Power Shell, SMO
WMI cmdlet đơn giản. Phần III chỉ dẫn viết mã PowerShell kết nối với
SQL Server. Phn 4 sẽ giới thiệu cách sử dụng mã PowerShell để lặp nội dung
tập tin và kết nối tới các y chủ khác.
y tưởng tượng rằng chúng ta muốn kết nối tới các SQL Servers khác nhau
và thu thp thông tin chính xác như tên máy chủ, phiên bn và tất cả tên các
sở d liệu.
Bước 1
Chúng ta cn tạo một đoạn mã PowerShell hin thị tất cả các thông tin tn đối
với một máy chủ. Tạo connect2.ps1 như minh họa dưới đây. [Hình 1.0]
param (
[string] $SQLSERVER
)
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString =
"Server=$SQLSERVER;Database=master;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "select 'Servername:
'+@@servername as Result union Select 'Version:'+
@@version as Result union select 'Database:' +name from sysdatabases as
Result
order by Result desc "
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)
$SqlConnection.Close()
$DataSet.Tables[0]
nh 1.0
Bước 2
Thực hin đoạn mã sau: [nh 1.1]
./connect2 "HOME"
Chú ý: HOME là têny chủ. Hãy thay vào đó tên y chủ của bạn.
Kết qu
Result
------
Version:Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) ...
Servername: HOME
Database: VixiaTrack
Database: vixiadata
Database: vixia
Database: TrackEquipment
Database: test
Database: tempdb
Database: Sales2
Database: Sales
Database: pubs
Database: Northwind
Database: msdb
Database: model
Database: master
Database: Legacy_Vixia
Database: abc3
Database: abc2
Database: abc
nh 1.1
Bước 3
y lặp qua một tập tin và hin thị ra nội dung của tập tin đó. Tạo mã
loop1.ps1 sau đây: [Hình 1.2] Đồng thời tạo tập tin serverlist.txt file. [Hình
1.3]
param (
[string] $filename
)
$computers = get-content $filename
foreach ($computer in $computers)
{
write-host $computer
}
nh 1.2
Serverlist.txt
HOME
HOME\SQLEXPRESS
nh 1.3
y thực hiện mã loop1.ps1. [Hình 1.4]
./loop1 serverlist.txt
nh 1.4
Bước 4
y gihãy kết hợp connect2.ps1 loop1.ps1 để thu được tên của SQL
Server, phiên bản SQL Server và tt cả tên các sdữ liệu liệt kê tn
serverlist.txt.
Tạo connect3.ps1 như sau: [Hình 1.5]
param (
[string] $filename
)
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$computers = get-content $filename
foreach ($computer in $computers)
{
write-host "Details of the Server :" $computer
write-host "-----------------------------------"
$SqlConnection.ConnectionString =
"Server=$computer;Database=master;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "select 'Servername: '+@@servername as Result
union Select 'Version: '
+@@version as Result union select 'Database:' +name from sysdatabases as
Result
order by Result desc "