私は十分なPowerShellスキルを持っていますが、SQLサーバーを使用するスキルはありません。 PowerShellを使用してリモートSQLサーバーに関する情報を取得し、サーバー上で実行されているデータベースを特定する方法の正しい方向を誰かに教えてもらえますか?.
助けてくれてありがとう。
編集-SMOコードの使用
このコードをまとめてみましたが、エラーが発生しました:タイプが見つかりません[Microsoft.SqlServer.Management.Smo.Server]このタイプを含むアセンブリがロードされていることを確認してください
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$sqlServer = New-Object("Microsoft.SqlServer.Management.Smo.Server") "MSQLULTDBS04"
foreach($sqlDatabase in $sqlServer.databases) {$sqlDatabase.name}
2つのオプションがあり、どちらも、コマンドを実行しているホストにSQL Server Management Studioをインストールする必要があります:
インスタンスのオブジェクトのリストを取得するなどの基本的なタスクを学ぶのに少し簡単な形式が含まれているので、後者に傾いています。
SMOでは、使用する適切な assemblies をロードする必要があります。ほとんどの場合 Microsoft.sqlserver.management.smo.server
が最も一般的に使用されます。
SQLPSでは、使用しているSQL Serverのバージョンを知る必要があります。 SQL Server 2008 R2(およびR1)はadd-pssnapin *sql*
およびSQL Server 2012以降ではimport-module SQLPS
。
次に、データベースのリストを取得する際の問題について説明します。
SQLPSメソッド
dir SQLSERVER:\\SQL\ServerName\Default\Databases | select name
上記はデフォルトの名前付きインスタンスの場合です。名前付きインスタンスの場合は、「default」をインスタンス名に変更します。
SMOメソッド
$srv = New-Object 'Microsoft.SqlServer.Management.SMO.Server' "myInstance"
$srv.Databases | select name
これで、上記のコードを関数または各ループに簡単にラップできるため、複数のサーバー名を簡単に渡すことができます。
編集
PowerShellでどのような文献を読むかに応じて、スクリプトを書くのに時間がかかるほとんどの人は、スクリプトを繰り返し使用できるようにするために時間を費やします。これは、関数(私にとっては基本レベル)とモジュール(まだ触れていないより高度なモジュール)のいずれかを介して行われます。
だからあなたのサンプルコードのために:
[Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
$sqlServer = New-Object("Microsoft.SqlServer.Management.Smo.Server") "MSQLULTDBS04"
foreach($sqlDatabase in $sqlServer.databases) {$sqlDatabase.name}
データベースのリストを出力するためにforeach
ループは必要ありません。これはSMO内のオブジェクトで、複数のプロパティが含まれています。そのうちの1つはname
で、PowerShellは以下に示すように、デフォルトの形式で出力します。 ここでSMOとSQLPSの違いに注意する必要があるのは、SQLPSはデフォルトではシステムデータベースを出力しないため、SMOは出力するということです。
PowerShellプロファイルのブログ投稿を検索する場合、一般的に行うことは、それにアセンブリコマンドを追加することです。これにより、PowerShellコマンドを開くときはいつでも、既に使用できます。次に、基本的に頻繁に使用するコマンドである関数を追加し、たまたまデータベース用の関数を追加します。
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
これはお好みに応じて変更できますが、ローカルインスタンスを使用して呼び出すと、以下の出力が得られます。
私は先に進み、私が難しい方法で見つけた何かをあなたに知らせます。 SMOを使用すると、SQL Server 2000からSQL Server 2014まで接続できますが、SQL Serverの各バージョンは、特定のプロパティの場所によって異なります。午後にツイッターでジョナサンケハヤと会話を学びましたが、このことを学びましたが、探していた物件を思い出せません。これらの状況では、 MSO for SMOの.NETクラスライブラリ は、探しているプロパティへのガイドに役立つため、友だちです。
SQLPSモジュールをインポートしたら、 Invoke-SQLcmd も使用できます。たとえば、
Import-Module SQLPS -DisableNameChecking
Invoke-SQLcmd -Server '.\sql2012' -Database master 'select * from sys.databases' | Format-Table