如何编写多个对象链方法调用以在多行代码中继续调用?

gan*_*elo 3 powershell powershell-2.0

我遇到了很多关于如何跨多行继续 powershell 脚本代码的示例,例如,调用使用“反勾号”(`)传递多个参数的方法:

myMethod $arg1 `
   $arg2 `
   $arg3 `
   ...etc.
Run Code Online (Sandbox Code Playgroud)

但是我想做的是继续跨多行链接对象方法链,例如,我想将其分解为多行代码:

$ps = [PowerShell]::Create()
[ref]$e = New-Object System.Management.Automation.Runspaces.PSSnapInException
$ps.Runspace.RunspaceConfiguration.AddPSSnapIn( "SqlServerCmdletSnapin100", $e ) | Out-Null
# This is ridiculous; how to I break the below code across multiple lines???
$ps.AddCommand( "Invoke-Sqlcmd").AddParameter( "InputFile", $PreCompareInfoObject.PreCompareBatchScript).AddParameter("serverinstance", $DBConnectInfoObject.DBDestServer).AddParameter("database", $DBConnectInfoObject.DBDestDB).AddParameter( "username", $DBConnectInfoObject.DBDestUserName).AddParameter("password",  $DBConnectInfoObject.DBDestPassword).AddParameter( "variable",  $variable).AddParameter("outputsqlerrors",  $true).AddParameter("abortonerror").AddParameter("Verbose") | out-file -filepath $PreCompareInfoObject.PreCompareOutputReport
$ps.Invoke()
Run Code Online (Sandbox Code Playgroud)

我可以这样做,但我不想这样做,并且由于某种原因,输出比我想要的更冗长:

...
$ps.AddCommand( "Invoke-Sqlcmd")
$ps.AddParameter( "InputFile", $PreCompareInfoObject.PreCompareBatchScript)
$ps.AddParameter("serverinstance", $DBConnectInfoObject.DBDestServer)
$ps.AddParameter("database", $DBConnectInfoObject.DBDestDB)
$ps.AddParameter( "username", $DBConnectInfoObject.DBDestUserName)
$ps.AddParameter("password",  $DBConnectInfoObject.DBDestPassword)
$ps.AddParameter( "variable",  $variable)
$ps.AddParameter("outputsqlerrors",  $true)
$ps.AddParameter("abortonerror")
$ps.AddParameter("Verbose") | out-file -filepath $PreCompareInfoObject.PreCompareOutputReport
...
Run Code Online (Sandbox Code Playgroud)

我想我正在寻找这个,但当然,它不起作用:

$ps `
   .AddCommand( "Invoke-Sqlcmd") `
   .AddParameter( "InputFile", $PreCompareInfoObject.PreCompareBatchScript) `
   .AddParameter("serverinstance", $DBConnectInfoObject.DBDestServer) `
   .AddParameter("database", $DBConnectInfoObject.DBDestDB) `
   .AddParameter( "username", $DBConnectInfoObject.DBDestUserName)
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激!

小智 5

像这样写:

$ps. 
 Addcommand("Invoke-SqlCmd"). 
 AddParameter("InputFile", $PreCompareInfoObject.PreCompareBatchScript).
Run Code Online (Sandbox Code Playgroud)

等等

也就是说,以点结束该行,然后您可以继续下一行,而无需使用反引号。