我有一个接受大量参数且相当大的脚本。我被要求构建一个用于执行脚本的GUI,以便用户可以轻松地执行脚本而不会犯错。所以想法是GUI脚本收集所有参数,然后执行脚本。在wpf事件脚本中执行脚本时的写入输出
“主”脚本使用write-output
和start-transcript
来登录到shell和文件。这也适用。 但是,当我从GUI脚本执行脚本时,我没有获得每个输出到shell或日志。我认为这是因为write-output
,因为Write-Host
确实有用,但我到处都听到有人说你不应该使用write-host
(例如:https://youtu.be/SSJot1ycM70?t=24m1s)。 那么我如何得到这个工作?
目前我使用这个从GUI执行脚本:
& $PSscriptroot\guitest2.ps1 -switchparam1:$localvar1 -switchparam2:$localvar2 -stringparam $localvar3
我试图通过CMD运行的PowerShell的新实例,但我似乎并没有得到这个工作。我也不知道如何以这种方式将参数“发送”到脚本中。
Invoke-Expression 'cmd /c powershell.exe -file C:\...\script.ps1 -paramters.
或
Invoke-Expression 'cmd /c powershell.exe -command {C:\..\script.ps1 -paramters..}
下面的两个脚本做我想做什么。但是当我在wpf事件中执行脚本时(即按下启动按钮后),第二个脚本仅显示write-warning
,write-error
和write-host
输出,所以不是write-output
。
SCRIPT1:
#gui script
$boolean = $true
$string = "test"
& $PSscriptroot\script2.ps1 -switch:$boolean -string $string
SCRIPT2:
param(
[switch]$switch,
[string]$string
)
Start-Transcript
write-output "output"
write-host "host"
$a = "Variable"
$a
write-error "error"
Write-Warning "warning"
Write-Debug "debug"
Stop-Transcript
编辑: 做了一些更多的测试。当在wpf
事件中调用时,显然write-output
完全不起作用。例如:如果
$wpf.startButton.Add_Click({
write-output "This message is not shown"
})
不知道这是一个错误或不
你可以把这下降到[mcve]吗?很难调试我们看不到的代码。脚本如何输出结果?即使您没有写出cmdlet,也可以在后台使用“Write-Output”。 – Matt
你说得对。我添加了两个** ** **的示例脚本。但是当我在wpf事件中运行脚本1的最后一行时(在按下启动按钮之后),我没有将所有输出回到我的shell/log –