使用Start-Process以管理员身份运行同脚本的PowerShell问题
解决PowerShell管理员重启会话时的控制台尺寸传递问题
已解决的控制台闪关问题
之前遇到新PowerShell控制台闪关,即便加了-NoExit也无效,核心原因是脚本路径含空格但未加引号,导致Start-Process无法正确解析路径参数。解决方式是将脚本路径用双引号包裹,在-ArgumentList中通过转义确保引号生效,比如:
Start-Process powershell.exe -Verb RunAs -ArgumentList "-NoExit", "& `"$PSCommandPath`""
传递原控制台尺寸到新管理员会话
要把原快捷方式设置的控制台宽度、高度传递给新的管理员会话,避免自动换行问题,可按以下步骤实现:
获取当前控制台的尺寸参数
直接读取当前会话的窗口大小和缓冲区大小:$windowSize = $host.ui.rawui.WindowSize $bufferSize = $host.ui.rawui.BufferSize启动管理员进程时注入尺寸设置命令
在启动新PowerShell进程的参数中,先执行控制台尺寸设置命令,再运行目标脚本并保留原传入参数:# 构建完整参数列表:先设置尺寸,再执行脚本 $startArgs = @( "-NoExit", "-Command", # 设置窗口大小 "`$host.ui.rawui.WindowSize = [System.Management.Automation.Host.Size]::new($($windowSize.Width), $($windowSize.Height));", # 设置缓冲区大小(避免内容截断) "`$host.ui.rawui.BufferSize = [System.Management.Automation.Host.Size]::new($($bufferSize.Width), $($bufferSize.Height));", # 调用原脚本并传递所有参数 "& `"$PSCommandPath`" $($args -join ' ')" ) # 启动管理员权限的PowerShell Start-Process powershell.exe -Verb RunAs -ArgumentList $startArgs
这样新启动的管理员会话会完全继承原会话的控制台尺寸,解决宽度不足导致的自动换行问题。
内容的提问来源于stack exchange,提问作者Gordon
相关产品推荐
相关产品推荐

