使用powershell对象来执行脚本

使用的Power
shell版本:3.0

大家好,

我正在尝试创建一个新的Powershell管道并在其中执行一个脚本,然后将它产生的输出转换为输出变量,但是我无法从对象内部(从执行的脚本)获得任何输出.这一切的重点是,我不必管理$Error对象,我打算用它来进行错误检测.这是一个例子如下:

$ps = [Powershell]::Create()

$File = ".\Test2.ps1"
$SortedParams = "-Name blah -Key foo"
$RootDirectory = Get-Location
$ExecutionDirectory = "$RootDirectory\Test3"

$ps.AddCommand("Set-Location").AddParameter("Path", "$ExecutionDirectory")
write-host "COMMAND 1: " $ps.Commands.Commands.Item(0).CommandText

$ps.AddScript("$File $SortedParams")
write-host "COMMAND 2: " $ps.Commands.Commands.Item(1).CommandText

$output = $ps.Invoke()

write-host $output

我应该提一下,我正在尝试使用以下3种方法在执行的脚本中生成输出:

>写主机
>写输出
> Write-Verbose(使用$ps.Streams.Verbose尝试获取输出,但没有)

非常感谢您提出的任何建议或提示!

最佳答案 除非您觉得特定需要按照您的方式执行操作,否则您可能需要考虑使用PowerShell后台作业.

后台作业允许您在单独的PowerShell实例中运行PowerShell命令,然后将这些作业的输出收集到变量中(如果这是您要执行的操作).

查看about_Jobs帮助主题以获取更多信息.

这是一个简单的例子:

$job = Start-Job -ScriptBlock { "Hello World!" }
$ret = Receive-Job $job -Wait -AutoRemoveJob

# value of $ret will be "Hello World!"
点赞