0

SSIS パッケージ内のある場所から別の場所にファイルをロボコピーする必要があります。フォルダーは別のドメインにあるため、robocopy.exe コマンドを実行する前に、別のアカウントを偽装する必要があります。「net use」コマンドを実行して必要なユーザー アカウントを偽装し、その後すぐに robocopy コマンドを実行できることがわかりました。プロセス実行コマンドでこれを直接実行する方法が見つからないため、プロセス実行タスクを使用して、これら 2 つのコマンドを別々の行として含むバッチ ファイルを実行します。このアプローチの欠点は、プロセスの実行コマンドの結果を読み取れないことです。したがって、これは私に3つの質問を導きます:

  1. 単一のプロセス実行タスクで複数行のコマンドを実行する方法はありますか?
  2. 1 行で別のアカウントになりすましている間に robocopy.exe を実行する方法はありますか?
  3. バッチ ファイルの結果を SSIS の変数または SSIS データベース ログに書き戻す方法はありますか?

上記の 3 つの質問のいずれかに肯定的な答えがあれば、robocopy コマンドの結果に基づいて、ジョブの成功または失敗のルールを追加する方法を考え出すことができるかもしれません。

4

4 に答える 4

2

拡張ストアド プロシージャ "xp_cmdshell" の使用を有効にしている場合、これは簡単に実現できます ("Surface Area Configuration" については Books Online を参照してください)。

次のサンプルでは、​​すべての ROBOCOPY オプションを含む .CMD ファイルを作成し、xp_cmdshell を使用してこのコマンド ファイルを単純に実行し、出力をテーブル変数 (代わりに永続テーブルにすることができます) に取得します。

次のステートメントを使用して、T-SQL ステートメントの実行タスクを SSIS パッケージに追加するだけです。

/** START **/

DECLARE @cmdfile nvarchar(255) = N'C:\myFolder\myCommandFile.cmd'
DECLARE @logtable table (
    [RowId] integer IDENTITY(1,1) NOT NULL
    ,[Message] nvarchar(1024) NULL
)

INSERT INTO @logtable ([Message])
EXEC xp_cmdshell @cmdfile

SELECT *
FROM @logtable
WHERE
[Message] IS NOT NULL

/** END **/

ROBOCOPY コマンドに設定されたロギング オプションに応じて、進行状況、ヘッダー、レポートなどを表示できます。これらのオプションについては、ROBOCOPY のドキュメントを参照してください。また、ROBOCOPY コマンドからのコンソール出力を取得する場合は、/TEE スイッチを使用してみてください。

于 2010-10-05T08:55:50.460 に答える
0

RUNASこれを行う方法の 1 つは、 (別のユーザー アカウントを偽装するために) を使用してバッチ コマンドを実行することです (複数の行項目を実行できます)。

スクリプトを使用して、バッチ ファイルの出力をログ ファイルにキャプチャし、その内容を SSIS に読み込むことができます。

SSIS ログへの書き込み方法がよくわからないので、他の開発者がそれについて何と言っているか知りたいです。

于 2009-10-26T17:49:45.433 に答える
0

単一のプロセス実行タスクで複数行のコマンドを実行する方法はありますか?

はい、実行可能ファイルとして「Cmd.exe」を使用stringします 次の式で変数を作成します (サンプル):

*"/C \"start robocopy c:\\temp\\v10.2a c:\\temp\\v1 *.WRI /Z /S && start robocopy c:\\temp\\v10.2a c:\\temp\\v1 *.dll /Z /S\""*

次に、コンポーネント式を介して引数パラメーターにマップします。次に、これらの 2 つ (またはそれ以上) の robocopy を // で実行できます。

于 2013-02-08T13:11:11.653 に答える
0

バッチ ファイルの実行からデータベースにデータを取得するための 2 つのラウンド アバウトな方法を見つけました。1 つの方法は、実際のバッチ ファイルにログを追加することです。これはまだ試していませんが、概念的には可能のようです。私が試みた他のオプションは、バッチ ファイルの実行を SQL Server エージェントのジョブ ステップとして配置し、フラット ファイル ログを追加することです。これを行った後、特定のメッセージのファイルをスクレイピングする小さなパッケージを作成しました。私はまだより良い解決策を望んでいますが、これは今のところ十分に機能します。

于 2009-11-01T18:33:33.613 に答える