SQLエージェントジョブ(SQL Server 2016)内でPowerShellスクリプトをセットアップしようとしています。構文エラーが発生しているように見えるサードパーティのモジュールDBATOOLS.psd1を使用しています。現在、私のSQLジョブには1行のコードがあり、失敗しています:
Import-Module e:\dbatools-master\dbatools-master\dbatools.psd1
次のエラーでジョブが失敗するのはなぜですか?このコマンドは、PowerShell ISEで実行すると問題なく機能します。
Error Message: Unable to start execution of step 1 (reason: line(5): Syntax error). The step failed.
これをSQL Serverエージェントジョブステップとして実行している場合は、PowerShell
タイプではなくOperating system (CmdExec)
ステップタイプを使用する必要があります。
CmdExec
内で、必要なすべての手順を含むファイルをマシン上に作成し、それを呼び出すのが最善です。
たとえば、以下を含むファイルC:\PowerShellScripts\MyScript.ps1
を作成します...
Import-Module e:\dbatools-master\dbatools-master\dbatools.psd1
Copy-SqlLogin -Source ServerA -Destination ServerB
次に、CmdExec
ジョブステップでpowershell.exe "& 'C:\PowerShellScripts\MyScript.ps1'"
を使用してそのスクリプトを呼び出します。
通常、PowerShellステップを別のモジュールで使用できない理由を拡大するのがSQL Serverプロバイダーです。それはニースを再生しません、そして MSにこれを修正させるために項目を接続します があります。
ジョブステップに$erroractionpreference = 'stop'
を追加すると、コマンドが誤っている理由の完全な出力が表示されます。
ユーザーとして実行:NT Service\SQLSERVERAGENT。 PowerShellスクリプトの92行目でジョブステップがエラーを受け取りました。対応する行は「if(Get-Command TabExpansionPlusPlus\Register-ArgumentCompleter -ErrorAction Ignore)」です。スクリプトを修正し、ジョブを再スケジュールしてください。 PowerShellによって返されるエラー情報は次のとおりです: 'SQL Server PowerShellプロバイダーエラー:パスSQLSERVER:\ TabExpansionPlusPlusが存在しません。有効なパスを指定してください。 '。プロセス終了コード-1。ステップは失敗しました。
一部の文字/コマンドを解釈する方法がわからないため、ほとんどの場合プロバイダーが問題です。 PowerShellステップタイプでPowerShell.exeホストのコンテキスト内にいる場合、私たちの生活は非常に簡単で素晴らしいことが起こります。