2013-11-01 137 views
0

Powershell v3添加了Invoke-WebRequest和Invoke-RestMethod,但我無法從該版本獲取Invoke-SqlCmd。如果我退回到Powershell v2,我可以調用SqlCmd,但現在Invoke-WebRequest和Invoke-RestMethod不再可用。無法使用Invoke-SqlCmd和Invoke-RestMethod創建Powershell腳本?

我可以'調用表達式sqlcmd'或'& sqlcmd',但是我認爲我必須手動將輸出 - 這只是一個字符串 - 封裝到PS更加客觀化的東西上。

有什麼辦法可以同時擁有所有這些方法,最好是PS3?

+0

您是否明確在v3中添加SQL Server Cmdlet Snapin?也許在你的個人資料中有些東西? – Matt

+0

嘗試Get-PSSnapin -Registered。你是否看到snapin被列爲可用?如果是這樣,請嘗試使用Add-PSSnapin添加它。 – crownedjitter

回答

0

我發現沒有直接回答我的問題,只是一個變通。

安裝Powershell 4並再次使用installutil註冊Sql Powershell的.dll文件Snapin似乎工作正常。無論我在運行PS 3時使用installutil做了什麼,它總是註冊PowerShell版本2的管理單元,這不起作用。

Get-PSSnapin -Registered將始終顯示正確註冊的SQL * 100 dll,但是顯示Powershell的第2版。在運行版本4時爲相同的dll重複相同的命令會將它們註冊爲版本4.從那裏,我可以運行Add-PSSnapin Sql*100Invoke-SqlCmd然後可用。

雖然這對我有幫助,但它很可能是環境問題,而且這個答案可能不會幫助任何人。

0

Invoke-SqlCmd確實如此,它執行具有給定參數的外部sclcmd

備選:

Import-Module SQLPS 
# Create connection to server using Integrated Security 
$ServerName = "localhost" 
$DBname = "master" 

$sqlConn = New-Object -Type:Microsoft.SqlServer.Management.Common.ServerConnection -ArgumentList:$ServerName 
$server = New-Object -Type:Microsoft.SqlServer.Management.Smo.Server -ArgumentList:$sqlConn 
$Database = $server.Databases[$DBname] 

# Get script from file: 
#$Script = (Get-Content $ScriptFileName) -Join [Environment]::NewLine 
$Script = "sp_who" 
$Batch = New-Object -TypeName:Collections.Specialized.StringCollection 
$Batch.AddRange($Script) 
$result = $Database.ExecuteWithResults($Batch) 

$result.Tables | Format-Table 
+0

謝謝,'Format-Table'管道看起來像我想要解析文本輸出到更加客觀的東西時所缺少的位。 –