0

Powershell v3 添加了 Invoke-WebRequest 和 Invoke-RestMethod,但我无法让 Invoke-SqlCmd 从该版本工作。如果我退回到 Powershell v2,我可以 Invoke-SqlCmd,但现在 Invoke-WebRequest 和 Invoke-RestMethod 不再可用。

我可以'Invoke-Expression sqlcmd'或'& sqlcmd',但我想我必须手动将输出(只是一个字符串)编组为更客观的PS。

有没有办法同时拥有所有这些方法,最好是从 PS3 获得?

4

2 回答 2

0

我没有找到对我的问题的直接答案,只是一种解决方法。

安装 Powershell 4 并再次使用 installutil 为 Sql Powershell 管理单元注册 .dll 文件似乎已经奏效。无论我在运行 PS 3 时对 installutil 做了什么,它总是为 Powershell 版本 2 注册管理单元,这不起作用。

Get-PSSnapin -Registered将始终显示正确注册的 SQL*100 dll,但适用于 Powershell 版本 2。在运行版本 4 时对相同的 dll 重复相同的命令会将它们注册为版本 4。从那里,我可以运行Add-PSSnapin Sql*100Invoke-SqlCmd然后就可以使用了。

尽管这对我有所帮助,但很可能是环境出了差错,而这个答案可能对任何人都没有太大帮助。

于 2013-11-09T18:55:06.393 回答
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
于 2013-11-04T23:53:33.613 回答