SQL Server PowerShell

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

SQL Server PowerShell のインストール

SQL Server PowerShell モジュールには、 SqlServerSQLPS の 2 つがあります。

SqlServer モジュールは、使用する現在の PowerShell モジュールです。

SQLPS モジュールは、(後方互換性のため) SQL Server のインストールに含まれていますが、今後更新されることはありません。

SqlServer モジュールには、SQLPS のコマンドレットの更新バージョンに加え、最新の SQL 機能をサポートする新しいコマンドレットが含まれています。

SQL Server Management Studio (SSMS) には前のバージョンの SqlServer モジュールが含まれて "いました" が、それは SSMS の 16.x バージョンのみでした。

SSMS 17.0 以降で PowerShell を使用するには、SqlServer モジュールを PowerShell ギャラリーからインストールします。

Azure Data Studio で PowerShell を使用することもできます。

モジュールが SQLPS から SqlServer に変更された理由

SQL PowerShell の更新プログラムを出荷するには、SQL PowerShell モジュールの ID と、SQLPS.exe で知られるラッパーを変更する必要がありました。 この変更によって、SQL PowerShell モジュールが SqlServer モジュールと SQLPS モジュールの 2 つになりました。

SQLPS モジュールをインポートする場合は、ご利用の PowerShell スクリプトを更新してください。

Import-Module -Name SQLPS を実行する PowerShell スクリプトがあり、新しいプロバイダーの機能と新しいコマンドレットを活用したい場合は、これらを Import-Module -Name SqlServer に変更する必要があります。 新しいモジュールは %ProgramFiles%\WindowsPowerShell\Modules\SqlServer フォルダーにインストールされます。 そのため、$env:PSModulePath 変数を更新する必要はありません。 SqlServer という名前の、サード パーティ製またはコミュニティ バージョンのモジュールを使用するスクリプトがある場合は、名前の競合を避けるため Prefix パラメーターを使用してください。

SQLPS モジュールが同じコンピューターにインストールされている場合、サイド バイ サイドの問題を回避するために、Import-Module SQLServer を使用してスクリプトを開始することをお勧めします。

このセクションは、SQL Agent ではなく、PowerShell から実行されるスクリプトに適用されます。 #NOSQLPS を使用すれば、新しいモジュールを SQL Agent のジョブ ステップで使用できます。

SQL Server PowerShell のコンポーネント

SqlServer モジュールには、次のものが付属しています。

  • PowerShell プロバイダー。これにより、ファイル システム パスと同様の簡単なナビゲーション メカニズムを使用できるようになります。 ファイル システム パスと同様に、ドライブが SQL Server 管理オブジェクト モデルに関連付けられ、ノードがオブジェクト モデルのクラスに基づくパスを構築できます。 その後、cd (Set-Location のエイリアス) や dir (Get-ChildItem のエイリアス) などのなじみのあるコマンドを使用して、コマンド プロンプト ウィンドウでフォルダーを移動するのと同様の方法でパスを移動できます。 ren (Rename-Item のエイリアス) や del (Remove-Item のエイリアス) などの他のコマンドを使用すると、パス内のノードに操作を実行できます。

  • Transact-SQL または XQuery ステートメントを含む sqlcmd コマンドレットの実行などの操作をサポートする、コマンドレットのセット。

  • AS プロバイダーとコマンドレットは、以前は個別にインストールされていました。

SQL Server のバージョン

SQL PowerShell コマンドレットは、Azure SQL Database、Azure Synapse Analytics、およびすべてのサポートされる SQL Server 製品のインスタンスを管理するために使用できます。

PowerShell パスではサポートされない文字を含んだ SQL Server 識別子

Encode-Sqlname (ConvertTo-EncodedSqlName のエイリアス) と Decode-Sqlname (ConvertFrom-EncodedSqlName のエイリアス) のコマンドレットを使用すると、PowerShell パスではサポートされていない文字を含んだ SQL Server 識別子を指定できます。 詳細については、「 PowerShell での SQL Server 識別子」を参照してください。

Convert-UrnToPath コマンドレットを使用して、Database Engine オブジェクトの Unique Resource Name を SQL Server PowerShell プロバイダーのパスに変換します。 詳細については、「 URN から SQL Server プロバイダー パスへの変換」を参照してください。

クエリ式と Uniform Resource Name

クエリ式は、オブジェクト モデル階層内の 1 つまたは複数のオブジェクトを列挙する条件のセットを指定するために XPath と同様の構文を使用する文字列です。 URN (Uniform Resource Name) は、単一のオブジェクトを一意に識別する特定の種類のクエリ式文字列です。 詳細については、「 クエリ式と Uniform Resource Name」を参照してください。

SQL Server エージェント

SQL Server エージェントで使用されるモジュールに対する変更はありません。 そのため、PowerShell 型のジョブ ステップを持つ SQL Server エージェント ジョブでは、SQLPS モジュールが使用されます。 詳細については、SQL Server エージェントで PowerShell を実行する方法に関する記事を参照してください。 ただし、SQL Server 2019 以降では、SQLPS を無効にすることができます。 そのためには、PowerShell 型のジョブ ステップの最初の行に #NOSQLPS を追加します。これにより、SQL Agent による SQLPS モジュールの自動読み込みは停止されます。 これを行うと、コンピューターにインストールされている PowerShell のバージョンがご利用の SQL Agent ジョブによって実行されます。その後、希望する他の任意の PowerShell モジュールを使用できるようになります。

トラブルシューティング SQLPS

エージェント ジョブ ステップ (PowerShell サブシステム) が次のエラーで失敗する場合、このセクションが問題のトラブルシューティングに役立つ場合があります。

ジョブ ステップは、PowerShell スクリプトの 1 行目でエラーを受け取りました。 対応する行は 'import-module SQLPS' です。 スクリプトを修正し、ジョブを再スケジュールします。 PowerShell から返されるエラー情報は "モジュール ディレクトリに有効なモジュール ファイルが見つからなかったため、指定されたモジュール 'SQLPS' は読み込まれませんでした" です。

SQLPS モジュールが環境変数 PSModulePath で使用できる必要があります。 SSMS 16.x をアンインストールすると、PSModulePath から SQLPS が削除されることがあります。 PSModulePath に格納されている現在の値を確認するには、次の PowerShell を実行します。

 $env:PSModulePath -split ";"

パスが設定されている場合は、C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules のようなエントリが表示されます。 パスが設定されていない場合は、サーバー上の SQLPS フォルダーを探し、PowerShell または [システムのプロパティ] > [詳細設定] > [環境変数] のいずれかを使用して環境変数値に追加します。

SQLServer モジュールと SQL Agent

ご利用の SQL Agent ジョブ ステップ内で SqlServer モジュールを使用したい場合は、スクリプトの最初の 2 行に次のコードを配置します。

#NOSQLPS
Import-Module -Name SqlServer

コマンドレット リファレンス

次のステップ