2016-06-28 81 views
1

我有一個PowerShell腳本(test.ps1),它通過Invoke-Sqlcmd執行一個簡單的SQL查詢。該腳本位於遠程文件共享服務器上。下面是腳本:如何在潮汐的PowerShell腳本中運行Invoke-Sqlcmd

param 
(
[string]$SQL_username, 
[string]$SQL_password 
) 

Write-Host ('begin script') 
$db = 'some_DB' 
$server = 'some_IP' 
$query = 'SELECT TOP 10 * FROM some_schema.some_table' 
Invoke-Sqlcmd -Username $SQL_username -Password $SQL_password -ServerInstance $server -Database $db -Query $query -QueryTimeout 60000 
Write-Host ('end script') 

當我遠程與潮汐用戶帳戶的文件共享服務器,腳本執行成功和預期。

我有一個相應的潮汐作業,執行此test.ps1腳本。這裏是潮作業信息:

命令

C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe 

命令參數

-ExecutionPolicy bypass -File D:\some_path\test.ps1 
-SQL_username "<SQL_username.1>" 
-SQL_password "<SQL_password.2>" 

當我運行通過潮汐的腳本,在潮汐的輸出屏幕顯示:

開始腳本

Invoke-Sqlc MD:「調用-SQLCMD」一詞不被識別爲名稱的cmdlet,函數,腳本文件或可操作的程序的 ...

端腳本

所以,很顯然,無論用戶潮汐用於運行腳本,用戶識別Write-Host cmdlet,但它不識別Invoke-Sqlcmd cmdlet。怎麼會這樣?而且,我該如何解決這個問題? (我發現潮汐用戶是NT AUTHORITY \ SYSTEM,而不是作業的「運行」選項卡中指定的運行時用戶,這與我以遠程服務器身份登錄到遠程服務器的潮汐用戶相同。)

+0

SQL模塊未在SYSTEM的PowerShell配置文件中加載。請參閱http://www.jasonq.com/blog/2012/3-things-to-do-if-invoke-sqlcmd-is-not-recognized-in-windows-powershell。您可能需要將任務設置爲使用用戶帳戶運行,因爲我認爲在以SYSTEM身份運行時可能無法訪問網絡。 –

+0

我認爲你是對的。我使用另一個用戶帳戶使用New-PSSession創建了一個新的PowerShell會話,並且它可以工作。 – user3100444

回答

1

SQL模塊是不在SYSTEM的PowerShell配置文件中加載。您需要之前的任何invoke-sqlcmd語句運行類似以下的東西:

# For SQL 2008 
Add-PSSnapin SqlServerCmdletSnapin100 
Add-PSSnapin SqlServerProviderSnapin100 

# For SQL 2012 
Import-Module SqlPs 

您可能還需要設置爲與用戶帳戶運行任務,因爲它不會能夠訪問爲運行在網絡系統。

+0

注意'Import-Module SQLPS;'將當前工作目錄更改爲'SQLSERVER:\',SQL Server提供程序。除非你指定'Import-Module SQLPS -DisableNameChecking',否則Import-Module將發出警告,因爲SQL Server開發者選擇了非標準動詞。這些都被認爲是固定的SQL Server 2016年,但我沒有檢查自己。 –