为什么在没有“-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 应用程序。决定用户体验的是主机应用。

最后,对于最好奇的人:


我觉得我写这个回答更多是为了自己的利益;这对我来说是一个有用的复习,因为我不时被同事问到这个问题...

这仅仅是因为 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