1

我只是想要一个 .ps1 文件,它可以运行一行简单的 powershell,但不会立即关闭。

我试过做“read-host -prompt”“”但它在代码运行之前显示,然后仍然立即关闭

get-appxpackage -allusers | select name 

read-host -prompt "Press enter to exit"

我希望结果是我运行文件,然后有机会在按下某些东西退出之前读取 powershell 窗口中的输出。但是实际的输出是在代码运行之前提示退出然后运行输出并关闭

4

2 回答 2

1

执行这行代码后:

get-appxpackage -allusers | select name 

您将准备好一些“待处理”对象以返回到 Powershell 管道输出流。对象在完成之前无法发送到管道Read-Host(因为 Powershell 会将这些对象视为 ps1 文件的“输出”)。完成Read-Host后,对象被发送到管道(通过输出流)。由于那里没有其他 cmdlet(使用 ps1 文件的输出),Powershells 默认行为是将管道内容输出到 Powershell 主机。

正如上面评论中已经提到的@Lee_Daily,添加Out-Host会将输出发送get-appxpackage -allusers | select name到 Powershell 主机。因此,get-appxpackage -allusers | select name | out-host没有对象在输出流中排队等待进一步的管道操作。

我建议您检查以下来源:

这些是您必须了解的基本 Powershell 概念。

希望有帮助。

于 2019-05-02T15:09:25.510 回答
0

关注 Lee 和 Moerwald 所说的话。

实时流式传输的另一种方法是使用 ForEach 或 ForEach-Object,它也比 Out-Host 方法性能更高,因为不默认写入屏幕。如果后者的性能v屏幕写入对您很重要。如果不想要 Out-Host 的屏幕输出,发送到 Null。

# Using Out-Host

Measure-Command {
    get-appxpackage -allusers | 
    select name | Out-Host
}



Name                                             
----                                             
1527c705-...            
...           
InputApp                                         
Microsoft.AAD.BrokerPlugin                       
Microsoft.AccountsControl                        
...                            


# Results

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
*** Milliseconds      : 643 ***
Ticks             : 6431627
TotalDays         : 7.44401273148148E-06
TotalHours        : 0.000178656305555556
TotalMinutes      : 0.0107193783333333
TotalSeconds      : 0.6431627
TotalMilliseconds : 643.1627



# User ForEach in a script Block

Measure-Command {
    & { foreach ($item in get-appxpackage -allusers | select name)
    { "processing $item"}}
}


# Results

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
*** Milliseconds      : 385 ***
Ticks             : 3858318
TotalDays         : 4.46564583333333E-06
TotalHours        : 0.0001071755
TotalMinutes      : 0.00643053
TotalSeconds      : 0.3858318
TotalMilliseconds : 385.8318



# Standard ForEach-Object

Measure-Command {
    get-appxpackage -allusers | 
    ForEach-Object {select name}
}


# Results

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
*** Milliseconds      : 498 ***
Ticks             : 4988494
TotalDays         : 5.77371990740741E-06
TotalHours        : 0.000138569277777778
TotalMinutes      : 0.00831415666666667
TotalSeconds      : 0.4988494
TotalMilliseconds : 498.8494
于 2019-05-03T05:38:14.810 回答