gpt4 book ai didi

powershell - 如何在脚本完成后防止 Powershell 关闭?

转载 作者:行者123 更新时间:2023-12-03 23:44:00 34 4
gpt4 key购买 nike

免责声明:我是 scipting/Powershell 菜鸟的缩影,所以请耐心等待。

我编写了一个脚本来返回当前登录到给定工作站的任何用户的 Active Directory 用户名。

$input = Read-Host "Workstation Name"
$domain = ".*****.***.com"
$computer = $input + $domain
$list = gwmi win32_computersystem -comp $computer | select Username,Caption
Write-Output $list

但是,如果我从任务栏中的固定脚本运行它,Powershell 窗口会在我有机会查看结果之前关闭。

我已经尝试了来自 this post 的方法 2 和 3 ,但无济于事。方法 2 会在结果显示之前而不是之后提示用户输入,即使在脚本末尾添加了提示代码也是如此。

任何帮助将不胜感激。

最佳答案

方法 2 来自 linked post - 即,在退出脚本之前等待用户按下一个键 - 可以使用,但需要额外的努力:

按如下方式结束脚本以查看 $list 的值之前pause命令提示:

$list | Out-Host  # Force *synchronous* to-display output.
pause # Wait for the user to press Enter before exiting.

注: pause在 PowerShell 中只是一个函数包装器 Read-Host如下: $null = Read-Host 'Press Enter to continue...'因此,如果您想自定义提示字符串,请调用 Read-Host直接地。

This answer解释为什么使用 Out-Host (或 Format-Table )在这种情况下是必要的;简而言之:
  • 在 PSv5+ 中,隐式应用 Format-Table命令异步等待最多 300 毫秒。对于额外的管道输入,努力从输入数据中导出合适的列宽。
  • 因为你用的是Write-Output没有预定义格式数据的输出对象具有 2 个属性(4 个或更少),隐式选择表格输出,以及 Format-Table在幕后异步使用。
  • 注意:异步行为仅适用于其类型格式化指令未预定义的输出对象(如 Get-FormatData <fullOutputTypeName> 报告的那样);例如,System.Management.Automation.AliasInfo 的输出格式实例输出 Get-Alias是预定义的,所以 Get-Alias; pause确实以预期的顺序产生输出。
  • pause命令在等待期结束之前执行,只有在您回答提示后才会打印表格,然后窗口立即关闭。
  • 使用显式格式化命令(在最通用的情况下为 Out-Host,但任何 Format-* cmdlet 也可以)通过同步生成显示输出来避免该问题,以便输出在 pause 时可见显示其提示。
  • 关于powershell - 如何在脚本完成后防止 Powershell 关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57861040/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com