logo

Microsoft Windows PowerShell và SQL Server 2005 SMO - Phần III


Microsoft Windows PowerShell và SQL Server 2005 SMO - Phần III 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:\ps\a.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.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:: HOME\SQLEXPRESS 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  
DMCA.com Protection Status Copyright by webtailieu.net