22/08/2018, 10:56

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 3

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 1 Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 2 The MAK Phần I và Phần II của loạt bài này đã chỉ dẫn các thiết lập PowerShell và SMO, các cmdlet WMI đơn giản. ...

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 1
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 2

The MAK

Phần I và Phần II của loạt bài này đã chỉ dẫn các thiết lập PowerShell và SMO, các cmdlet WMI đơn giản. Phần 3 này sẽ giới thiệu cách viết mã cho cmdlet PowerShell và thực thi chúng. Mã kịch bản là yếu tố cần thiết cho các thao tác tự động và lặp đi lặp lại.

Chính sách thực thi

4 loại chính sách thực thi khác nhau của Windows PowerShell là Restricted, AllSigned, RemoteSigned và Unrestricted. Chúng ta sẽ tìm chính sách thực thi của Windows PowerShell trên vùng làm việc. [Hình 1.0]

Cmdlet:
Get-executionpolicy
Kết quả:
Restricted


Hình 1.0

Giả sử ta có dòng code sau trên PowerShell script 'a.ps1'. [Hình 1.1]

Echo “test”


Hình 1.1

Nếu thử thực hiện mã lệnh khi chính sách thực thi của PowerShell là restricted, thì sẽ xuất hiện thông báo lỗi sau. [Hình 1.2]

Lệnh thực hiện mã PowerShell

. /a.ps1

Kết quả

File C:psa.ps1 cannot be loaded because the execution of scripts is disabled
on this system. Please see "get-help about_signing" for more details.
At line:1 char:3
+ ./a <<<<


Hình 1.2

Hãy thay đổi chính sách thực thi thành unrestricted. Lệnh thực hiện mã PowerShell đã có thể được thi hành bởi cmdlet sau. [Hình 1.3]


Hình 1.3

Bây giờ hãy thử thực thi đoạn mã a.ps1 như hiển thị trong hình dưới đây. [Hình 1.4]

Lệnh

./a

Kết quả

Test


Hình 1.4

Điều khiển Input trong mã PowerShell

Khi thực hiện các thao tác lặp đi lặp lại, chúng ta thích ứng dụng để tương tác hơn và xây dựng ứng dụng để đòi hỏi đầu vào từ người sử dụng. Ta có thể thực hiện tương tự với PowerShell.
Hãy tạo một mã PowerShell chấp nhận tên của trường SQL Server và tên cơ sở dữ liệu. Ngoài ra, hãy để PowerShell hiển thị tất cả các bảng trên cơ sở dữ liệu đó. Điều này có thể được thực hiện với cmdlet read-host.

Thí dụ 1: [Hình 1.5]

Read-host “Please Enter Second Number”.


Hình 1.5

Thí dụ 2

Chúng ta có thể gán giá trị cmdlet là một biến số. [Hình 1.6]

$a=read-host "Please Enter Second Number" $a


Hình 1.6

Kết hợp thí dụ 1 và thí dụ 2 kết nối với SQL Server.

Tạo mã PowerShell có tên connectsql.ps1. [Hình 1.7]

$SQLSERVER=read-host "Enter SQL Server Name:"
$Database=read-host "Enter Database Name:"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$SQLSERVER;Database=$DATABASE;Integrated Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "select name from sysobjects where type='u'"
$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]


Hình 1.7

Bây giờ hãy thực hiện mã connectsql.ps1 trên. [Hình 1.8]

./connectsql
Enter SQL Server Name:: HOMESQLEXPRESS
Enter Database Name:: AdventureWorks

Chú ý: HOME là máy chủ và SQLEXPRESS là tên ví dụ của SQL Server. Hãy thay thế tên này bằng tên máy chủ và SQL Server của bạn. AdventureWorks là tên cơ sở dữ liệu. Bạn cũng chú ý thay thế tên cơ sở dữ liệu này cho tương ứng với tên cơ sở dữ liệu trên máy chủ.


Hình 1.8

Mã connectsql gán giá trị được nhập vào các biến $SQLSERVER và $DATABASE, kết nối chuỗi sử dụng các biến đó và hiển thị ra kết quả.

Kết quả:

name
----
ProductProductPhoto
StoreContact
Address
ProductReview
TransactionHistory
AddressType
ProductSubcategory
AWBuildVersion
TransactionHistoryArchive
ProductVendor
BillOfMaterials
UnitMeasure
Vendor
PurchaseOrderDetail
Contact
VendorAddress
VendorContact
PurchaseOrderHeader
ContactCreditCard
WorkOrder
ContactType
CountryRegionCurrency
WorkOrderRouting
CountryRegion
CreditCard
Culture
Currency
SalesOrderDetail
CurrencyRate
Customer
SalesOrderHeader
CustomerAddress
Department
Document
Employee
SalesOrderHeaderSalesReason
SalesPerson
EmployeeAddress
EmployeeDepartmentHistory
EmployeePayHistory
SalesPersonQuotaHistory
Illustration
SalesReason
Individual
SalesTaxRate
JobCandidate
Location
SalesTerritory
Product
SalesTerritoryHistory
ScrapReason
Shift
ProductCategory
ShipMethod
ProductCostHistory
ProductDescription
ShoppingCartItem
ProductDocument
ProductInventory
SpecialOffer
ProductListPriceHistory
SpecialOfferProduct
ProductModel
StateProvince
ProductModelIllustration
DatabaseLog
ProductModelProductDescriptionCulture
ErrorLog
Store
ProductPhoto

Tuy nhiên, khi viết mã tự động, bạn không muốn người dùng nhập dữ liệu. Thay vào đó, ta nên chấp nhận các tham số.

Hãy nâng cấp đoạn mã trên bằng cách chấp nhận các tham số.[Hình 1.9]

param (
[string] $SQLSERVER,
[string] $Database
)
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=$SQLSERVER;Database=$DATABASE;Integrated
Security=True"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "select name from sysobjects where type='P'"
$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]


Hình 1.9

Thực hiện các đoạn mã như hình dưới. [Hình 2.0]


Hình 2.0

connectsql gán các giá trị như một tham số tới các biến riêng biệt $SQLSERVER và $DATABASE, kết nối các chuỗi sử dụng các biến đó và hiển thị ra kết quả.

Kết quả

name
----
uspPrintError
uspLogError
uspGetBillOfMaterials
uspGetEmployeeManagers
uspGetManagerEmployees
uspGetWhereUsedProductID
uspUpdateEmployeeHireInfo
uspUpdateEmployeeLogin
uspUpdateEmployeePersonalInfo

Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 4
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 5
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 6
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 7
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 8
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 9
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 10
Microsoft Windows PowerShell và SQL Server 2005 SMO – Phần 11

0