SQL Server エージェントでの Windows PowerShell ステップの実行

適用対象: SQL Server Not supported. Azure SQL Database Azure Synapse Analytics Analytics Platform System (PDW)

SQL Server エージェントを使用して、スケジュールされた時刻に SQL Server PowerShell スクリプトを実行します。

Note

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

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

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

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

PowerShell ギャラリーから SqlServer モジュールをインストールします。

詳細については、「SQL Server PowerShell」を参照してください。

SQL Server 2019 以降では、SQLPS を無効にすることができます。 PowerShell 型のジョブ ステップの最初の行に #NOSQLPS を追加します。これにより、SQL Agent による SQLPS モジュールの自動読み込みは停止されます。 これにより、コンピューターにインストールされている PowerShell のバージョンが、SQL Agent ジョブによって実行されるようになり、希望する他の任意の PowerShell モジュールを使用できます。

SQL Agent ジョブ ステップで SqlServer モジュールを使用するには、次のコードをスクリプトの最初の 2 行にします。

#NOSQLPS
Import-Module -Name SqlServer

SQL Server エージェントから PowerShell を実行する

SQL Server エージェントのジョブ ステップにはいくつかの種類があります。 それぞれの種類は、レプリケーション エージェントやコマンド プロンプト環境など、特定の環境を実装するサブシステムに関連付けられています。 Windows PowerShell スクリプトのコードを作成した後、SQL Server エージェントを使用して、スケジュールされた時刻に実行されるジョブや SQL Server イベントに応答して実行されるジョブにそのスクリプトを含めることができます。 コマンド プロンプト ジョブ ステップまたは PowerShell ジョブ ステップを使用して、Windows PowerShell スクリプトを実行できます。

  • PowerShell ジョブ ステップを使用して SQL Server エージェント サブシステムに sqlps ユーティリティを実行させます。このユーティリティは、PowerShell 2.0 を起動し、sqlps モジュールをインポートします。 SQL Server 2019 以降を実行している場合は、SQL Agent のジョブステップで SqlServer モジュールを使用することをお勧めします。

  • コマンド プロンプト ジョブ ステップを使用して PowerShell.exe を実行し、 sqlps モジュールをインポートするスクリプトを指定します。

メモリ使用量に関する注意

sqlps モジュールで PowerShell を実行する SQL Server エージェント ジョブのステップごとに、約 20 MB のメモリを消費するプロセスが起動されます。 大量の Windows PowerShell ジョブ ステップを同時実行すると、パフォーマンスに悪影響が及びます。

PowerShell ジョブ ステップの作成

PowerShell ジョブ ステップの作成

  1. [SQL Server エージェント] を展開し、新しいジョブを作成するか、既存のジョブを右クリックして [プロパティ] を選択します。 ジョブの作成に関する詳細については、「 ジョブの作成」を参照してください。

  2. [ジョブのプロパティ] ダイアログで [ステップ] ページを選択し、 [新規作成] を選択します。

  3. [新しいジョブ ステップ] ダイアログの [ステップ名] ボックスにジョブ ステップ名を入力します。

  4. [種類] ボックスの一覧で、 [PowerShell] を選択します。

  5. [実行するアカウント名] ボックスの一覧で、ジョブで使用する資格情報を備えたプロキシ アカウントをクリックします。

  6. [コマンド] ボックスに、ジョブ ステップで実行する PowerShell スクリプト構文を入力します。 または、 [開く] を選択してスクリプト構文が記述されたファイルを選択します。

  7. [詳細設定] ページを選択して、ジョブ ステップのオプションのうち、ジョブ ステップが成功または失敗した場合のアクション、SQL Server エージェントによるジョブ ステップの再試行回数、および再試行間隔を設定します。

コマンド プロンプト ジョブ ステップの作成

CmdExec ジョブ ステップの作成

  1. [SQL Server エージェント] を展開し、新しいジョブを作成するか、既存のジョブを右クリックして [プロパティ] を選択します。 ジョブの作成に関する詳細については、「 ジョブの作成」を参照してください。

  2. [ジョブのプロパティ] ダイアログで [ステップ] ページを選択し、 [新規作成] を選択します。

  3. [新しいジョブ ステップ] ダイアログの [ステップ名] ボックスにジョブ ステップ名を入力します。

  4. [種類] ボックスの一覧の [オペレーティング システム (CmdExec)] をクリックします。

  5. [実行するアカウント名] ボックスの一覧で、ジョブで使用する資格情報を備えたプロキシ アカウントをクリックします。 既定では、CmdExec ジョブ ステップは SQL Server エージェント サービス アカウントのコンテキストで実行されます。

  6. [コマンド成功時のプロセス終了コード] ボックスに、0 ~ 999999 の値を入力します。

  7. [コマンド] ボックスに、PowerShell.exe で始まるコマンドを、実行する PowerShell スクリプトを指定するパラメーターと共に入力します。 これらの例は、Windows コマンド プロンプトから PowerShell コマンドを実行する構文に似ています。 使用可能なすべての構文オプションについては、PowerShell.exe -? を参照してください。

    • 例 1: 単純なコマンドレットを実行します。
         PowerShell.exe -Command "Get-Date"
      
    • 例 2: 現在のサーバーに対して SQLCmd.exe を使用してクエリを実行します (この例では、SQL Agent トークンの置換を使用します)。
         PowerShell.exe -Command "sqlcmd.exe -S $(ESCAPE_NONE(SRVR)) -Q 'SELECT @@VERSION'"
      
    • 例 3: PowerShell スクリプトを実行します (サーバーにインストールする必要がある PowerShell 7.0 の実行可能ファイル名である pwsh.exe を使用します。)。 スクリプトへのパスは、SQL Agent が実行されているサーバーに対してローカルであることにご注意ください。
         PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1 
      
  8. [詳細設定] ページを選択して、ジョブが成功または失敗した場合の操作、SQL Server エージェントによるジョブ ステップ実行の試行回数、SQL Server エージェントでジョブ ステップの出力を書き込むファイルなど、ジョブ ステップのオプションを設定します。 sysadmin 固定サーバー ロールのメンバーだけが、オペレーティング システム ファイルにジョブ ステップの出力を書き込むことができます。

参照