SQL Server エージェントを使用して、スケジュールされた時刻に SQL Server PowerShell スクリプトを実行します。
注
SQL Server PowerShell モジュールには SqlServer と SQLPS の 2 つがあります。
SqlServer モジュールは、使用する現在の PowerShell モジュールです。
SQLPS モジュールは、(後方互換性のため) SQL Server のインストールに含まれていますが、今後更新されることはありません。
SqlServer モジュールには、SQLPS のコマンドレットの更新バージョンに加え、最新の SQL 機能をサポートする新しいコマンドレットが含まれています。
PowerShell ギャラリーから SqlServer モジュールをインストールします。
詳細については、 SQL Server PowerShell を参照してください。
SQL Server 2019 以降では、SQLPS を無効にすることができます。 PowerShell の種類のジョブ ステップの最初の行で、sql エージェントが SQLPS モジュールの自動読み込みを停止する #NOSQLPS
を追加できます。 これで、SQL エージェント ジョブによって、マシンにインストールされている PowerShell のバージョンが実行され、その後、任意の他の PowerShell モジュールを使用できるようになります。
SQL エージェント ジョブ ステップで 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 ジョブ ステップの作成
[SQL Server エージェント] を展開し、新しいジョブを作成するか、既存のジョブを右クリックして [プロパティ] を選択します。 ジョブの作成の詳細については、「/sql/ssms/agent/create-jobs」を参照してください。
[ジョブのプロパティ] ダイアログで [ステップ] ページを選択し、 [新規作成] を選択します。
新しいジョブ ステップ ダイアログで、ジョブ ステップ名 を入力します。
[種類] ボックスの一覧で、 [PowerShell] を選択します。
[実行] の一覧で、ジョブが使用する資格情報を持つプロキシ アカウントを選択します。
[コマンド] ボックスに、ジョブ ステップで実行する PowerShell スクリプト構文を入力します。 または、 [開く] を選択してスクリプト構文が記述されたファイルを選択します。
[詳細設定] ページを選択して、ジョブ ステップのオプションのうち、ジョブ ステップが成功または失敗した場合のアクション、SQL Server エージェントによるジョブ ステップの再試行回数、および再試行間隔を設定します。
コマンド プロンプト ジョブ ステップの作成
CmdExec ジョブ ステップの作成
[SQL Server エージェント] を展開し、新しいジョブを作成するか、既存のジョブを右クリックして [プロパティ] を選択します。 ジョブの作成の詳細については、「/sql/ssms/agent/create-jobs」を参照してください。
[ジョブのプロパティ] ダイアログで [ステップ] ページを選択し、 [新規作成] を選択します。
新しいジョブ ステップ ダイアログで、ジョブ ステップ名 を入力します。
種類 リストで、オペレーティング システム (CmdExec) を選択します。
「実行」 一覧で、ジョブが使用する資格情報を持つプロキシ アカウントを選択します。 既定では、CmdExec ジョブ ステップは SQL Server エージェント サービス アカウントのコンテキストで実行されます。
成功したコマンド の プロセス終了コード] ボックスに、0 から 999999 までの値を入力します。
[コマンド] ボックスに、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 エージェントが実行されているサーバーに対してローカルです。PWSH.exe -ExecutionPolicy RemoteSigned -File X:\MyScripts\script001.ps1
[詳細設定] ページを選択して、ジョブが成功または失敗した場合の操作、SQL Server エージェントによるジョブ ステップ実行の試行回数、SQL Server エージェントでジョブ ステップの出力を書き込むファイルなど、ジョブ ステップのオプションを設定します。 ジョブ ステップの出力をオペレーティング システム ファイルに書き込むことができるのは、sysadmin 固定サーバー ロールのメンバーだけです。
関連コンテンツ
- SQL Server PowerShell
- PowerShell を使用して SQL Server エージェントを する