如何让PowerShell多对象变量在弹出框中每行显示一个对象?
解决PowerShell弹窗中进程名换行显示的问题
当然可以实现!你遇到的问题是因为$test本质是一个字符串数组,当你直接把它放进弹窗的字符串参数里时,PowerShell会默认用空格将数组元素拼接成一行文本,所以弹窗里所有结果挤在一起。
要让每个进程名单独占一行,只需要用**-join操作符**把数组元素用换行符(n)连接起来就行。换行符n能被Wscript.Shell的PopUp方法识别,从而实现换行效果。
修改后的完整代码:
$test = (Get-Process -Name Win*).ProcessName $test # 控制台依然每行显示一个结果 # 将数组用换行符连接成单个字符串 $formattedTest = $test -join "`n" # 弹窗显示格式化后的文本 (New-Object -COM Wscript.Shell).PopUp($formattedTest, 0, "Title", 48)
更简洁的写法(不用额外变量):
如果不想多定义一个变量,也可以直接在PopUp方法里完成拼接:
$test = (Get-Process -Name Win*).ProcessName $test (New-Object -COM Wscript.Shell).PopUp($test -join "`n", 0, "Title", 48)
小提示:
如果你想让换行更符合Windows系统的标准(回车+换行),可以改用rn作为分隔符,效果是一样的:
$test -join "`r`n"
这样修改后,弹窗里的每个进程名就会单独显示在一行啦!
内容的提问来源于stack exchange,提问作者Rakha
相关产品推荐
相关产品推荐

