为什么在没有“-y”开关的情况下使用 Powershell ISE 时 Chocolatey 会挂起?
Why does Chocolatey hang when using Powershell ISE without the `-y` switch?
当使用带有 Chocolatey 的 PowerShell ISE 安装应用程序时,如果我忘记了 -y
开关,它会挂起等待某种 "confirmation" 而不会在任何地方弹出?
我必须按 Ctrl+Alt+Del 才能终止 PowerShell ISE 和 Chocolatey,它使事情处于中途状态。
下面是它的样子:
除了上面对 OP 的评论外,关于 PowerShell ISE 不支持(大多数)交互式控制台应用程序...
值得记住的是 PowerShell_ISE.exe 中的 REPL window 不仅仅是某种对接的 PowerShell.exe 控制台。大多数时候,用户体验 与 相同,但这隐藏了一些差异:
这两个可执行文件都是 主机应用程序 运行 PowerShell 运行space(引擎)。您甚至可以编写自己的 "hosts" PowerShell 应用程序。决定用户体验的是主机应用。
- PowerShell.org: The Shell vs The host
- Spiceworks.com: The Shell vs The Host
- Writing a Windows PowerShell Host
最后,对于最好奇的人:
我觉得我写这个回答更多是为了自己的利益;这对我来说是一个有用的复习,因为我不时被同事问到这个问题...
这仅仅是因为 PoSH ISE 不是用于用户交互 .exe 命令的东西。
如果您是 .exe 或任何需要响应的文件,则在 ISE 中您必须提供它。
您可以通过尝试任何其他踢出交互式内容的 .exe 轻松证明这不是 Chocolatey 的东西。例如,只需键入:
nslookup 在脚本窗格中 F8 到 运行 它,或者在控制台窗格中键入它并按回车键
无论哪种方式,控制台都会挂起,等待您无法提供的交互式响应。
您仍然可以在 PoSH ISE 中使用 nslookup 等交互式命令,但您必须提供所有参数。例如:
nslookup microsoft.com
nslookup -type=mx microsoft.com
nslookup -q=soa microsoft.com
PS 5.1现在连错误信息都踢出来了
nslookup
无法启动 "nslookup"。不支持交互式控制台应用程序。
要 运行 应用程序,请使用 Start-Process cmdlet 或使用“文件”菜单中的 "Start PowerShell.exe"。
要view/modify 被阻止的控制台应用程序列表,请使用 $psUnsupportedConsoleApplications,或查阅联机帮助。
在 line:0 char:0
您可以通过这种方式轻松地 shell 临时连接到 PowerShell 控制台主机。
这是我个人资料中用于此类努力的一个功能。
Function Start-ConsoleCommand
{
[CmdletBinding()]
[Alias('scc')]
Param
(
[string]$ConsoleCommand,
[switch]$PoSHCore
)
If ($PoSHCore)
{Start-Process pwsh -ArgumentList "-NoExit","-Command &{ $ConsoleCommand }" -Wait}
Else
{Start-Process powershell -ArgumentList "-NoExit","-Command &{ $ConsoleCommand }" -Wait}
}
所以,只需输入
scc -ConsoleCommand choco install winmerge
它将弹出控制台主机并保持打开状态,直到您关闭它。
更新
根据 - Alex Kwitny
的要求
PoSHGet 默认只有两个存储库,
nuget
PSGallery
但您可以添加自己的或其他的。
您可以使用以下 cmdlet 来实现这一点。
我已经有一段时间不用 Chocolatey 了,但快速浏览一下我的档案,下面是我用过的
设置巧克力存储库
Find-Module
Get-Module
Find-Package
Get-Package
Get-PackageProvider
Get-PackageSource
Get-PackageSource -Provider chocolatey
Register-PackageSource -Name chocolatey -Provider Chocolatey -Trusted -Location http://chocolatey.org/api/v2/ -Verbose
Find-Module
Get-Module
Find-Package
Get-Package
当使用带有 Chocolatey 的 PowerShell ISE 安装应用程序时,如果我忘记了 -y
开关,它会挂起等待某种 "confirmation" 而不会在任何地方弹出?
我必须按 Ctrl+Alt+Del 才能终止 PowerShell ISE 和 Chocolatey,它使事情处于中途状态。
下面是它的样子:
除了上面对 OP 的评论外,关于 PowerShell ISE 不支持(大多数)交互式控制台应用程序...
值得记住的是 PowerShell_ISE.exe 中的 REPL window 不仅仅是某种对接的 PowerShell.exe 控制台。大多数时候,用户体验 与 相同,但这隐藏了一些差异:
这两个可执行文件都是 主机应用程序 运行 PowerShell 运行space(引擎)。您甚至可以编写自己的 "hosts" PowerShell 应用程序。决定用户体验的是主机应用。
- PowerShell.org: The Shell vs The host
- Spiceworks.com: The Shell vs The Host
- Writing a Windows PowerShell Host
最后,对于最好奇的人:
我觉得我写这个回答更多是为了自己的利益;这对我来说是一个有用的复习,因为我不时被同事问到这个问题...
这仅仅是因为 PoSH ISE 不是用于用户交互 .exe 命令的东西。
如果您是 .exe 或任何需要响应的文件,则在 ISE 中您必须提供它。
您可以通过尝试任何其他踢出交互式内容的 .exe 轻松证明这不是 Chocolatey 的东西。例如,只需键入:
nslookup 在脚本窗格中 F8 到 运行 它,或者在控制台窗格中键入它并按回车键
无论哪种方式,控制台都会挂起,等待您无法提供的交互式响应。
您仍然可以在 PoSH ISE 中使用 nslookup 等交互式命令,但您必须提供所有参数。例如:
nslookup microsoft.com
nslookup -type=mx microsoft.com
nslookup -q=soa microsoft.com
PS 5.1现在连错误信息都踢出来了
nslookup
无法启动 "nslookup"。不支持交互式控制台应用程序。 要 运行 应用程序,请使用 Start-Process cmdlet 或使用“文件”菜单中的 "Start PowerShell.exe"。
要view/modify 被阻止的控制台应用程序列表,请使用 $psUnsupportedConsoleApplications,或查阅联机帮助。 在 line:0 char:0
您可以通过这种方式轻松地 shell 临时连接到 PowerShell 控制台主机。 这是我个人资料中用于此类努力的一个功能。
Function Start-ConsoleCommand
{
[CmdletBinding()]
[Alias('scc')]
Param
(
[string]$ConsoleCommand,
[switch]$PoSHCore
)
If ($PoSHCore)
{Start-Process pwsh -ArgumentList "-NoExit","-Command &{ $ConsoleCommand }" -Wait}
Else
{Start-Process powershell -ArgumentList "-NoExit","-Command &{ $ConsoleCommand }" -Wait}
}
所以,只需输入
scc -ConsoleCommand choco install winmerge
它将弹出控制台主机并保持打开状态,直到您关闭它。
更新 根据 - Alex Kwitny
的要求PoSHGet 默认只有两个存储库,
nuget
PSGallery
但您可以添加自己的或其他的。 您可以使用以下 cmdlet 来实现这一点。 我已经有一段时间不用 Chocolatey 了,但快速浏览一下我的档案,下面是我用过的
设置巧克力存储库
Find-Module
Get-Module
Find-Package
Get-Package
Get-PackageProvider
Get-PackageSource
Get-PackageSource -Provider chocolatey
Register-PackageSource -Name chocolatey -Provider Chocolatey -Trusted -Location http://chocolatey.org/api/v2/ -Verbose
Find-Module
Get-Module
Find-Package
Get-Package