MS SQL Server 2012 R2(Windows Server 2008R2、Windows 7 Prof)のSqlServer AgentジョブでPowerShellコマンドを実行するのに苦労しています
(たとえば、リモートファイル共有で7日より古い.bakファイルを削除する必要があります。
コマンドをSqlServerAgentジョブに挿入する前に、Windowsコマンドラインから実行しようとしました。
forfilesを使用 :forfiles /P "\\RemoteHostName\sharedFolderName" /s /m *.bak /D -7 /C "cmd /c del @path"
エラーを与える:
"エラー:UNCパス(\ machine\share)はサポートされていません"
dir \\ RemoteHostName\sharedFolderName |? {$ _。CreationTime -lt(get-date).AddDays(-7)} |デル
後者は、Windows PowerShellコマンドプロンプトから使用されたときに必要なリモートファイルを削除しますが、SqlServerAgentジョブで実行されると失敗します-失敗
そのようなSqlServerAgentジョブの履歴は次のように引用して示しています。
仕事は成功した。ジョブはユーザーdomain\domainAccountName
によって呼び出されました。実行する最後のステップはステップ1でした
localHostName\sqlbackup
。ジョブスクリプトで次のエラーが発生しました。これらのエラーはスクリプトを停止しませんでした。PowerShellScriptの行でジョブステップがエラーを受け取りました。対応する行は 'dir "\\ RemoteHostName\sharedFolderName \"です|? {$ _。CreationTime -lt(get-date).AddDays(-7)} | del '。スクリプトを修正し、ジョブを再スケジュールしてください。 PowerShellから返されるエラー情報は次のとおりです: '存在しないため、パス' \\RemoteHostName\sharedFolderName
'が見つかりません。'プロセス終了コード0。ステップは成功しました。失敗したジョブとジョブステップの緑色のチェックマークに注意してください
もう一度、結果のテキスト出力を拡大します。
また、このSqlServerAgentジョブステップを実行すると、「処理中」、次に「成功」と表示されます。
ただし、必要なファイルを削除できないままです。
質問:
Windows PowerShellコマンドを使用した古いファイルのパージがコマンドラインプロンプトから成功し、SqlServerAgentジョブとステップ内から失敗するのはなぜですか?
2a。 SQL Server 2012からスケジュールに従って古いリモートファイルを削除することでどのように成功しますか?
PS
SQL Serverエージェントジョブプロキシを使用しています この回答 リモート/ターゲットおよびローカル/ソースホストで同じ/同じ名前のローカルWindowsユーザーアカウントを使用していますsqlbackupとパスワード
Windowsタスクスケジューラでのスケジュール設定と同じストーリー-前の手順でリモートの場所(ここでは説明外)へのコピーは成功しますが、ジョブと手順は何も削除せずに「成功」します。そして、私はすべてをSQL Server SqlServerAgentジョブに集中することに興味があります(ただし、外部にはありません)。
ForfilesはUNCでは機能しません。コツは、pushdを使用して共有UNCをマッピングすることです。これは一時的なドライブをマップして入力しました。ポッドはするだろう
pushd\RemoteHostName\sharedFolderName forfiles/P "\ RemoteHostName\sharedFolderName"/s/m * .bak/D -7/C "cmd/c del @path" popd
PowerShellエラーが原因でSQLエージェントのステップが失敗するようにするには、$erroractionpreference
設定を調整する必要があります。既定では、この値はContinue
に設定されているため、SQL Serverエージェントが実際のPowerShellコマンドで問題が発生したことを検出するためのエラーは発生しないため、手順は成功を示します。
これを修正する必要があるスクリプトの先頭に配置できます:$erroractionpreference="stop"
。これにより、PowerShellがSQL Serverエージェントプロセスに細流するエラーが発生します。
これを達成しました(SQL Server 2012からN日より古いリモートファイルをスケジュールどおりに削除する方法(SqlServerAgentジョブを使用))。
SSASデータベースのバックアップを実行していて、別のサーバーで古いバックアップファイルを削除する必要がありました。
参照してください run-a-powershell-script-on-a-different-server-from-inside-a-sql-server-job
SQL Serverエージェントを実行するには、ドメインアカウントを使用します。そのアカウントに、削除するファイルを含むネットワーク共有に対する変更権限を付与します。