2013-04-09 92 views
0

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

当我这样做:

$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

因此,使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 
相关问题