0

使用 Powershell,我执行一个 SQL 脚本,该脚本在 SQL Server Management Studio 的“消息”选项卡中返回一个生成的脚本。但我无法在 PowerShell 中获得它。

当我这样做时:

$ps = [PowerShell]::Create()
[ref]$e = New-Object System.Management.Automation.Runspaces.PSSnapInException
$ps.Runspace.RunspaceConfiguration.AddPSSnapIn( "SqlServerCmdletSnapin100", $e ) | Out-Null
$ps.AddCommand( "Invoke-Sqlcmd" ).AddParameter( "ServerInstance", "localhost").AddParameter( "Database", "MyDatabase").AddParameter("InputFile", "D:\MyScript.sql").AddParameter("Verbose")
$ps.Invoke()
$ps.Streams
$ps.Streams.Verbose | % { $_.Message | Out-File -Append D:\SqlLog.txt }

我收到此错误:

PS D:\NEMO\Scripts\Database> $ps.Invoke()
Exception calling "Invoke" with "0" argument(s): "Object reference not set to an instance of an object."
At line:1 char:11
+ $ps.Invoke <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : DotNetMethodException

谢谢您的帮助。

4

1 回答 1

1

所以让Powershell输出消息并不是那么简单,我认为它只能在命令行中工作。尝试这个

write-host $line
    Start-Transcript $outputfilepath
    $ScriptParams = "DatabaseName=$line" "
    Invoke-Sqlcmd -ServerInstance $SQLInstance -Username $SQLAdminUser -Password $SQLAdminPwd -InputFile "D:\File.sql" -verbose -Variable $ScriptParams 
    Stop-Transcript
于 2013-04-09T15:28:04.960 回答