如何在PowerShell中获取SQL Server Management Studio选项卡消息?

时间:2013-04-09 15:16:20

标签: sql-server powershell

使用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

感谢您的帮助。

1 个答案:

答案 0 :(得分: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