web-dev-qa-db-ja.com

外部ファイルではなくSSISまたはTSQLに埋め込まれたPowershellコードの実行

外部ファイル* .ps1にコードを保存せずに、SSISまたはT-SQLにPowerShellコードを埋め込む方法はありますか? SSIS/Tsqlがpowershellを実行できることはわかっていますが、コードは常に別の場所に保存されているようです。 SSISパッケージまたはt-sqlストアドプロシージャに埋め込まれたpowershellコードが必要です。これを実行できます。

Dbasでの時間の問題、ファイル共有フォルダーのセットアップ、およびこれらのpowershellファイルをDev、QA、Prod環境(複数のサーバーがある)に展開すると、一部のDevopsプロセスを軽減できます。

1)T-sqlルートはxp_cmdshellを使用する可能性がありますが、これが真であるかどうかは不明です。 xp_cmdshellまたはT-SQL領域で完全に異なるルートを使用する安全な方法はありますか?

2)以下の記事では、SSISでのPowershellの実行について説明していますが、別のファイルを呼び出しています。 SSISにコードを埋め込み、PowerShellを実行できますか?

https://blogs.msdn.Microsoft.com/ssis/2017/01/26/run-powershell-scripts-in-ssis/

最後に、ワークフローの並列プロセスを実行しようとしています。 Powershellストアドプロシージャをデータベースで並列実行

Workflow TestRunParallelExecute
{
    $ServerName = "localhost"
    $DatabaseName = "testrun"
    $Procedure_Query = "select name from sys.procedures"
    $Procedure_List = (Invoke-Sqlcmd -Server $ServerName -Database $DatabaseName -Query $Procedure_Query)

    ForEach -Parallel ($Procedure in $Procedure_List.Name)
    {
         Invoke-Sqlcmd -Server $ServerName -Database $DatabaseName -Query $Procedure 
    }
}
TestRunParallelExecute
cls
1
user162241

xp_cmdshellを使用してワークフローを呼び出す場合は、ガイダンスについて この回答 を参照してください(tl; dr:すべての改行をスペースで置き換えます)。

SSIS実行プロセスタスクを使用してpowershell.exeなしファイルを参照する場合は、 既存のガイダンス を使用できますが、「-F D:\myScript.ps1ProcessArguments アドホックスクリプトを実行するためのダイアログ(-C 'hello' | Out-File C:\temp\foo.txtを使用してテスト)を作成できます。ただし、このアプローチを実際に実装する場合の注意事項と問題点のリストがあるはずです。

Powershell SQLエージェントジョブステップ を作成し、それを ad-hoc または スケジュールどおり のいずれかで実行することもできます。

1
Peter Vandivier

PSコードをSSISパッケージにパッケージ化する最良のオプションは、SSISスクリプトタスクを使用し、C#経由でPowerShellホストを実行してコードを実行することです。 C#でPowerShellコードを実行する方法に関するオンラインのさまざまな例があります。何度か試してみて、クライアント環境でさまざまな経験をしました。

プロセス実行タスクが機能している間、そのタスクエディタでコードの変更を処理するのは面倒になります。それはあなたのPSスクリプトがどれほど複雑になるかに基づいています。スクリプトタスクを使用すると、複数行を使用してPSコード自体を分割できるため、処理が簡単になります。

0
user507