SQL Server 2008 以降の、SQL Server Agent では、ステップとして PowerShell を使用したタスクを作成することができます。
タスクで使用される PowerShell のバージョンについては少し癖がありますのでメモとして。
今回は 2012 以降をターゲットとしています。
Run Windows PowerShell Steps in SQL Server Agent
SQL Server 2012 を使用している場合、「C:\Program Files (x86)\Microsoft SQL Server\110\Tools\PowerShell\Modules\SQLPS」の、SQL Server 2012 向けの SQLPS が実行される必要があります。
SQL Server がインストールされている環境に、上位のバージョンの SSMS をインストールしている場合、上位バージョンの SQLPS が PSModulePath の最初のパスとして通っている可能性があり、このような設定となっている場合は、
次のユーザーとして実行: NT Service\SQLSERVERAGENT。ジョブ ステップは、PowerShell スクリプトの 1 行目でエラーを受け取りました。対応する行は ‘import-module SQLPS -DisableNameChecking’ です。スクリプトを修正し、ジョブのスケジュールを設定し直してください。PowerShell によって返されたエラー情報: ‘ファイルまたはアセンブリ ‘file:///C:\Program Files (x86)\Microsoft SQL Server\130\Tools\PowerShell\Modules\SQLPS\Microsoft.SqlServer.Management.PSSnapins.dll’、またはその依存関係の 1 つが読み込めませんでした。このアセンブリは現在読み込まれているランタイムより新しいランタイムでビルドされているため、読み込むことができません。 ‘. プロセス終了コード -1。. ステップは失敗しました。
というようなエラーが発生し、PowerShell のステップを実行することができません。
このような場合は、環境変数の PSModulePath に、SQL Server 2012 のパスを最初に通すことでエラーは回避できるかと思います。
SQL Server 2012 の場合、SQL Server Agent のステップとして PowerShell を実行すると、2.0 のバージョンで PowerShell が実行されるため、上位のバージョンで動作させたい場合には、ステップ内に直接スクリプトを記載するのではなく、「オペレーティング システム (CmdExec)」から「powershell.exe」を経由してスクリプトを呼び出すようにするとよいかと。
詳細については、SQL Server Agent Job and Powershell Version で解説されています。
SQL Server 2014 / 2016 でも試してみたのですが、これらでは最新バージョンが使用されているようでしたので、不要そうですが、特定のバージョンで動作させたい場合には、CmdExec から 「powershell.exe -Version 2.0」というような形でバージョン指定もできるかと。
# 使う機会はなさそうですが。