PowerShellを使用してMicrosoft SQL Serverを管理する

1つの投稿では、Microsoft SQL ServerでのWindows Powershellサポートの導入後に登場したすべての機能を説明することはできませんが、この投稿ではこれらの機能の少なくとも一部を紹介します。 SQL Server 2008以降、SQL Serverには2つのスナップインが含まれています。

  1. シンプルなナビゲーションメカニズムを提供するSQL Serverプロバイダー-「内部」SQL Serverでは、コマンドdir、ls、cd、Set-Location、Get-Locationなどを使用できます。
  2. SQL Serverアクションを指定するための一連のコマンドレット(たとえば、sqlcmdスクリプトの実行)。


したがって、サードパーティのソフトウェアを使用しなくても、PowerShellスクリプトでSQL Serverから必要な情報をすべて取得できます。



これは管理者にとってどのように役立ちますか?




そのため、クライアントユーティリティ(SQL Server Management Studio)を既にインストールしている場合、システムには既に上記のスナップインがあり、追加の手順は必要ありません。 そうでない場合は、Management Studioをここから無料ダウンロードできます。

Management Studioをインストールし、目的のSQL Serverのインスタンスに接続したら、そこから直接sqlpsユーティリティを実行できます。



表示されるsqlpsウィンドウにコマンド `dir`を入力すると、奇妙な画像が表示されます(SSMSのObjectExplorerのオブジェクトと` dir`コマンドの結果に注意してください):



sqlpsを使用する代わりに、次のような新しいスナップインを簡単に追加できます。

add-pssnapin SqlServerCmdletSnapin100;

add-pssnapin SqlServerProviderSnapin100;






get-pssnapin –registeredコマンドレットを使用して、それらがインストールされていることを確認できます。

したがって、これらのスナップインを追加すると、Get-Psdriveコマンドレットの出力を確認できます。

画像

cd SQLServer:\ SQL \ ServerName \ InstanceName \を実行することにより、SSMSからsqlpsを起動するのと同じ結果が得られます。

次に、最大の「グッズ」について少し説明します。 コマンドレット 合計で、5つのコマンドレットを使用できます。

  1. Invoke-Sqlcmdは、sqlcmdユーティリティとほぼ同じであり、このコマンドレットを使用して、必要なSQLServerでSQLクエリを実行できます。
  2. Invoke-PolicyEvaluation-SQL Serverオブジェクトのターゲットセットがポリシーベースの管理スキームで定義された条件に一致するかどうかを確認します。
  3. Encode-Sqlname-SQL Server識別子のエンコード。 SQL Serverでは、角かっこで囲まれた識別子をほとんどすべての値に割り当てることができます。これにより、PowerShellを使用して識別子にアクセスするのが難しくなります。 これを行うには、Encode-Sqlnameコマンドレットを使用します。これにより、「My:long_and | complexity | identy」が「My%3Along_and%7Ccomplexity%7Cidenty」に変わります。
  4. Decode-Sqlname-逆変換を実行します
  5. Convert-UrnToPath-SMOオブジェクトモデルで使用されるURN文字列を「読み取り可能な」パスに変換します。


私にとって最も重要なのは、サーバーで任意のSQLクエリを実行できるInvoke-Sqlcmdコマンドレットです。

ネットワーク上の多数の物理サーバーにインストールされた多数のインスタンスの使用済みメモリに関する情報を収集する必要がある状況を想像してください。 これを実現するには、特定の数のインスタンスを照会できるサードパーティのユーティリティを使用できます。同じsqlcmdを使用して、データを受信するサーバーを手動で指定できます。 PowerShellを使用すると、このタスクを簡単かつエレガントに解決できます。 たとえば、次のスクリプトは、コンピューターに登録されているすべてのインスタンスで「最大サーバーメモリ(MB)」の設定に関する情報を表示します。



$ServerList = dir -recurse SQLSERVER:\SQLRegistration\'Database Engine Server Group'\ | where {$_.Mode -ne "d"}

foreach ($RegisteredSQLs in $ServerList)

{

$dt = invoke-sqlcmd -ServerInstance $RegisteredSQLs.ServerName -database master -Query "SELECT SERVERPROPERTY('servername'), SERVERPROPERTY ('instancename'), value FROM sys.configurations

WHERE name = 'Max Server Memory (MB)'";

echo $dt >> C:\tmp\memory.txt;

}








この場合、このスクリプトを実行するアカウントに対して、SQL Serverでのログインを作成し、sys.configurationsへの要求を実行するための十分な権限が必要であることに注意してください。 SQLログインを使用する場合、Invoke-Sqlcmdコマンドレットのパラメーターでユーザー名とパスワードを指定する必要があります。



7台のサーバーをまったく同じ方法で構成するか、同じログインをサーバーに追加するか、サーバー上のすべてのデータベースのバックアップを作成する必要があることを想像してください... PowerShellとSQL Serverを併用すると、はるかに簡単になることを示したいと思いますデータベース管理者の生活。



参照:

  1. SQL Server PowerShellについて、Books Online-msdn.microsoft.com/en-us/library/cc281954.aspx
  2. Books Online-msdn.microsoft.com/en-us/library/cc281720.aspxのInvoke-Sqlcmdコマンドレットの使用
  3. SQL University-sqlchicken.com/sql-university



All Articles