如何让Start-Process遵循父PowerShell脚本的Verbose参数偏好
问题原因
Start-Process启动的是完全独立的PowerShell进程,父进程的命令行参数、Verbose偏好设置都不会自动跨进程传递,同时默认配置下子进程的输出也不会打印到父进程的控制台窗口。
解决方案
方案1:保留Start-Process的修改方法
你需要手动把Verbose参数传递给子脚本,同时配置Start-Process让子进程输出显示在当前窗口,修改Parent.ps1代码如下:
[CmdletBinding(SupportsShouldProcess=$true)] Param() Write-Verbose 'Triggering Child Process...' # 判断父脚本是否开启Verbose模式 $verboseParam = if ($PSBoundParameters.ContainsKey('Verbose')) { '-Verbose' } else { '' } # 启动子进程时传递参数,NoNewWindow让输出留在当前窗口,Wait等待子进程执行完毕 Start-Process PowerShell.exe -ArgumentList ".\Child.ps1 $verboseParam" -NoNewWindow -Wait
修改后再次执行powershell Parent.ps1 -Verbose即可得到你期望的输出。
方案2:无特殊需求可直接调用子脚本
如果你不需要用Start-Process实现提权、后台运行、隔离环境等特殊需求,直接调用子脚本更简单,参数会自动传递,修改Parent.ps1如下:
[CmdletBinding(SupportsShouldProcess=$true)] Param() Write-Verbose 'Triggering Child Process...' # 自动传递所有父脚本的参数(包括Verbose、WhatIf等)给子脚本 .\Child.ps1 @PSBoundParameters
内容的提问来源于stack exchange,提问作者tzman
相关产品推荐
相关产品推荐

