0

SQL Powershell で次のコマンドを使用して、SQL から返されたデータの csv を生成しています。

Invoke-Sqlcmd -Query "myp" -ServerInstance "." | Export-Csv -Path "d:\data\MyDatabaseSizes.csv" -NoTypeInformation

上記のコマンドは、SQL Power Shell で問題なく動作します。しかし、次のコードを使用してSQLから実行しようとしたとき

DECLARE @cmd varchar(1000)
SET @cmd = 'Invoke-Sqlcmd -Query "myp" -ServerInstance "." | Export-Csv -Path "d:\data\MyDatabaseSizes.csv" -NoTypeInformation'
EXEC xp_cmdshell @cmd

それはエラーを与える

「Invoke-Sqlcmd」は内部コマンドまたは外部コマンドとして認識されません。

誰でもSQLからコマンドを実行するのを手伝ってください。

ありがとう

4

1 に答える 1

0

xp_cmdmshellPowerShell コマンドではなく、Windows シェル コマンドを実行します。もちろん、次のように Windows シェル内から PowerShell を呼び出すこともできます。

DECLARE @cmd varchar(1000)
SET @cmd = 'Invoke-Sqlcmd -Query ''myp'' -ServerInstance ''.'' ^| Export-Csv -Path ''d:\data\MyDatabaseSizes.csv'' -NoTypeInformation'
EXEC xp_cmdshell 'powershell.exe -c "' + @cmd + '"'

ご了承ください:

  • Windows コマンドで二重引用符を使用できるように、PowerShell コマンドの二重引用符を単一引用符 (SQL 用にエスケープ) に置き換えました。PowerShell で二重引用符が必要な場合は、ファイルに PowerShell スクリプトを記述して、このすべてを回避することをお勧めします。
  • さらにパラメータが必要になる場合もあります (実行ポリシーの設定など)。 この MSDN ページには、PowerShell コマンド ライン スイッチに関する詳細なヘルプがあります。
  • コマンドライン引数のパイプ文字はエスケープする必要があります^
于 2016-06-29T11:30:55.400 に答える