Powershell v3添加了Invoke-WebRequest和Invoke-RestMethod,但我无法让Invoke-SqlCmd在该版本中运行。如果我回到Powershell v2,我可以调用Invoke-SqlCmd,但现在Invoke-WebRequest和Invoke-RestMethod不再可用。
我可以'调用-Expression sqlcmd'或'& sqlcmd'然后我认为我必须手动编组输出 - 这只是一个字符串 - 更加客观化为PS。
有没有办法同时使用所有这些方法,最好是PS3?
答案 0 :(得分: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
答案 1 :(得分:0)
我找不到直接回答我的问题,只是解决方法。
安装Powershell 4并再次使用installutil来注册Sql Powershell Snapin的.dll文件似乎有效。无论我在运行PS 3时对installutil做了什么,它总是在Powershell的版本2中注册了snapin,这是行不通的。
Get-PSSnapin -Registered
将始终显示正确注册的SQL * 100 dll,但是对于Powershell的版本2。在运行版本4时为相同的dll重复相同的命令会将它们注册为版本4.从那里,我可以运行Add-PSSnapin Sql*100
,然后Invoke-SqlCmd
可用。
虽然这对我很有帮助,但很可能是环境问题出现了问题,这个答案可能不会对任何人有所帮助。