2011-09-07 146 views
4

我有一個腳本,它針對名爲Server1的SQLServer運行Invoke-SQLCmd。從該服務器收集的數據傳遞給另一個針對Server2的腳本,並將結果插回服務器1上的一個表中。在每個Invoke-SQLCmd中,我都使用了-user -password和一個擁有sa兩個系統上的權限。通過SQL運行PowerShell腳本

當我從命令shell或Poershell ISE運行腳本時,我的數據被插入到表中,並且每件事情都正常工作;當我從SQL內部運行它時,什麼都不會發生。如下所示,我使用xp_cmdshell時沒有輸出(返回「null」)。

xp_cmdshell 'powershell.exe -file c:\script.ps1 -ExecutionPolicy Unrestricted' 

我已經把它變成一個SQLjob和使用鏈接到有兩個箱子管理權,但仍沒有記錄在作業歷史結果,並沒有數據,我在Server1上表我的域帳戶的代理帳戶。

我在做什麼錯了?如果它從ISE起作用,它肯定會起作用嗎?

回答

4

我還沒有這樣做的任何問題,甚至創造了一個情侶博客文章:

http://sev17.com/2009/04/05/executing-powershell-in-sql-server

http://sev17.com/2010/11/29/executing-powershell-in-sql-server-redux

的一兩件事,我做不同的是使用-command參數與文件名而不是-file,但這應該沒有區別。我也將文件名用雙引號引起來,但是如果腳本文件在文件路徑中沒有空格,這應該沒有什麼區別。

除此之外,我需要看看你的腳本在做什麼。例如它是否連接到其他機器?你可以在PowerShell中運行一個簡單的命令,比如'powershell -command get-command'嗎?

+0

你的鏈接被破壞 –

1

這似乎是我沒有正確加載管理單元。雖然我的SQLsnapins是爲第一個會話加載的,但並沒有將它傳遞給正在運行invoke-SQLcmd的第二個PS腳本。我的第二個腳本確實添加了cmdlet管理單元,但這可能還不夠。

它應該工作,但無論出於何種原因,從這裏添加腳本塊固定它。 :/

http://msdn.microsoft.com/en-us/library/cc281962.aspx

感謝那些迴應。

0

我在做什麼錯?

我認爲在提供的示例中存在錯誤。我本來期望:

xp_cmdshell 'powershell.exe -ExecutionPolicy Unrestricted -file c:\script.ps1' 

因爲:「文件必須在命令中的最後一個參數,因爲文件參數名稱後輸入的所有字符都被解釋爲腳本文件路徑,然後在腳本參數和他們的價值觀。「

來源:PowerShell.exe Command-Line Help