2013-11-01 161 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'管道看起来像我想要解析文本输出到更加客观的东西时所缺少的位。 –