2012-04-03 16 views
0

これはすでに(here)に質問があります。しかし、PowerShell 2とSQL Server 2008を使用しているので、もう一度聞いてみると違う答えが出るかもしれないと思っています。SQL Serverエージェントジョブ経由でPowerShellスクリプトを呼び出す - 開始スクリプトは出力を得ません

基本的に、私はそうのようなCMDスクリプトを実行し、SQL Serverエージェントジョブを、持っている:それは開始トランスクリプトを実行すると

powershell "&D:\SQL\Job\JobDir\Upload.ps1 (various arguments including log file name)" 

、ファイルが作成されますが、ヘッダーを除いて何もに書き込まれませんファイル。しかし、私がコマンドラインで実行すると、すべてが正しく記録されます。

私はすでにpowershellスクリプトで古いログファイルを管理するための多くのロジックを持っており、SQL Serverエージェントが提供するデフォルトのログを使用したくないということがあります。

情報を書き出すには、冗長フラグとwrite-messageとwrite-errorを使用してinvoke-sqlcmdを使用します。

ありがとうございました! シルビア

答えて

0

権限を作成したいテキストファイルを作成する権限を持っていない可能性があります私には問題ではありませんでした。 PowerShellの出力を非常に正確に操作する方法はありますが、出力ストリーム(エラー、冗長性など)はすべて異なりますが、これらの詳細に慣れるのではなく、SQL Serverエージェントが各ジョブステップ。それは大丈夫です。私はまだスクリプトでログファイルを管理してアーカイブするために書いたロジックを使用していますが、ログファイル自体がSQL Serverによって生成されていても実行できます。

0

開始トランスクリプトは、テキストファイルを作成します

エージェント・ジョブが実行されている権限は、PowerShellはそれを

+0

コメントありがとうございました。私はそれをもっと明確にするために質問を修正しましたが、ファイルは実際に作成されており、ほとんど何も書かれていません。 – Sylvia

+0

私は依然として権限を疑います - 自分の資格でジョブを実行してみてください。 – Jimbo

0

コンソールが開始されていない(サービスなどの)サービスが開始されていないと出力が失敗すると考えられます。出力は生成されず、ファイルが空である理由が説明されます。

は、(エージェントがファイルを作成する権限を持っている限り)として既に指定された場所にファイルを作成しますスタート・トランスクリプト上に述べたstart-transcript causes script to fail in a background job

0

を参照してください。ただし、技術的にコンソールウィンドウが実行されていないため、トランスクリプトファイルには何もストリームされません。 Cのような

SQLエージェントを介してPowerShellのファイルを実行している(前2012年):\ WINDOWS \ SYSTEM32 \ WindowsPowerShell \ v1.0を\たpowershell.exe C:\するMyScript.ps1 "SOMEPARAMETER"

I C:\ LOGGING \ myfile _ $(ESCAPE_SQUOTE(STRTDT))_ $(ESCAPE_SQUOTE(STRTTM)).txtのようなSQLの高度なプロパティでSQL Agentのネイティブ出力ファイルオプションを使用し、PowerShellの転写能力をスキップするだけです。

必要に応じてWrite-Hostを含めます。 Write-Host "r n"は新しい行を適切に作成します。 -Verboseのようなものも許可されていて、エラー出力とともにtry/catchして、ファイルが適切に記録されます。

関連する問題