Bạn có hai tùy chọn, cả hai tùy chọn này sẽ yêu cầu SQL Server Management Studio được cài đặt trên máy chủ bạn đang chạy các lệnh từ :
- SQLPS
- SMO
Tôi nghiêng về phía sau vì nó bao gồm định dạng dễ hơn một chút để tìm hiểu cho tác vụ cơ bản, chẳng hạn như lấy danh sách các đối tượng trong một ví dụ.
Với SMO, bạn phải tải các hội đồng thích hợp mà bạn muốn làm việc. Trong hầu hết các trường hợp Microsoft.sqlserver.management.smo.server
sẽ là một phổ biến nhất được sử dụng.
Với SQLPS, bạn phải biết phiên bản SQL Server nào bạn đang làm việc. SQL Server 2008 R2 (và R1) bạn sẽ add-pssnapin *sql*
và SQL Server 2012 và hơn thế nữa import-module SQLPS
.
Bây giờ đến câu hỏi trong tay để có được một danh sách các cơ sở dữ liệu.
Phương pháp SQLPS
dir SQLSERVER:\\SQL\ServerName\Default\Databases | select name
Ở trên sẽ là một thể hiện có tên mặc định, bạn sẽ thay đổi "mặc định" thành tên cá thể của mình nếu đó là một thể hiện được đặt tên.
Phương pháp SMO
$srv = New-Object 'Microsoft.SqlServer.Management.SMO.Server' "myInstance"
$srv.Databases | select name
Bây giờ đoạn mã trên có thể dễ dàng được gói vào một hàm hoặc cho mỗi vòng lặp cho phép bạn dễ dàng chuyển qua nhiều tên máy chủ.
Biên tập
Tùy thuộc vào tài liệu bạn đọc trên PowerShell, bạn sẽ thấy rằng hầu hết mọi người dành thời gian để viết kịch bản, sẽ tiếp tục và dành thời gian để làm cho nó trở thành một tập lệnh lặp lại. Điều này được thực hiện thông qua một chức năng (mức cơ bản đối với tôi) và sau đó là các mô-đun (nâng cao hơn mà tôi chưa chạm tới).
Vì vậy, đối với mã ví dụ của bạn:
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$sqlServer = New-Object("Microsoft.SqlServer.Management.Smo.Server") "MSQLULTDBS04"
foreach($sqlDatabase in $sqlServer.databases) {$sqlDatabase.name}
foreach
Vòng lặp của bạn là không cần thiết để xuất ra danh sách các cơ sở dữ liệu. Đây là một đối tượng trong SMO chứa nhiều thuộc tính, một trong số đó name
và PowerShell sẽ chỉ xuất ra ở định dạng mặc định, như được hiển thị bên dưới:
Một điểm khác biệt cần lưu ý giữa SMO và SQLPS ở đây là SQLPS sẽ không xuất cơ sở dữ liệu hệ thống theo mặc định , SMO sẽ.
Nếu bạn tra cứu bài đăng trên Blog trên PowerShell Profiles, một điều phổ biến cần làm là thêm lệnh lắp ráp vào đó để bất cứ khi nào bạn mở lệnh PowerShell, nó đã có sẵn. Sau đó tôi sẽ thêm các hàm về cơ bản là các lệnh tôi sử dụng và tình cờ có một hàm cho cơ sở dữ liệu:
function Get-DBList ($server)
{
$srv = New-Object 'Microsoft.SqlServer.Management.Smo.Server' $server
$srv.Databases | Select name, RecoveryModel,
@{Label="CompatibilityLevel";Expression={($_.CompatibilityLevel).ToString().Replace("Version", "")}}
} #end Get-DBList
Bạn có thể sửa đổi điều này theo ý thích của mình nhưng nếu tôi gọi nó bằng cách sử dụng thể hiện cục bộ của mình, tôi nhận được kết quả đầu ra bên dưới.
Tôi sẽ đi trước và cho bạn biết một cái gì đó mà tôi đã tìm ra một cách khó khăn. Sử dụng SMO, bạn có thể kết nối với SQL Server 2000 cho đến SQL Server 2014, tuy nhiên, mỗi phiên bản SQL Server có thể khác nhau về vị trí của các thuộc tính cụ thể. Tôi đã có một cuộc trò chuyện học tập với Jonathan Kehayias trên Twitter vào một buổi chiều khi học điều này nhưng tôi không thể nhớ lại tài sản mà tôi đang tìm kiếm. Trong những tình huống này, thư viện lớp .NET trên MSDN cho SMO là bạn của bạn vì nó có thể giúp hướng dẫn bạn đến các thuộc tính bạn đang tìm kiếm.