为什么在没有`-y`开关的情况下使用Powershell ISE时,Chocolatey会挂起?

时间:2018-01-05 20:28:22

标签: powershell powershell-ise chocolatey

当使用PowerShell ISE和Chocolatey安装应用程序时,如果我忘记了ORDER BY开关,它会挂起等待某种“确认”,而这种“确认”不会出现在任何地方吗?

我必须按Ctrl + Alt + Del来杀死PowerShell ISE和Chocolatey,它会让事情处于中途状态。

下面是这样的:

Screenshot

2 个答案:

答案 0 :(得分:2)

除了上面对OP的评论之外,关于PowerShell ISE不支持(大多数)交互式控制台应用程序......

值得记住的是, PowerShell_ISE.exe 中的REPL窗口不仅仅是某种停靠的 PowerShell.exe 控制台。大多数情况下,用户体验 相同,但这隐藏了许多差异:

这些可执行文件都是运行PowerShell 运行空间(引擎)的主机应用程序。您甚至可以编写自己的应用程序,以便主持"电源外壳。它是确定用户体验的主机应用程序。

最后,对于最好奇的人来说:

我想我为了自己的利益更多地写了这个答案;这对我来说是一次有用的复习,因为我不时地被同事们问到这个......

答案 1 :(得分:0)

这只是因为PoSH ISE不适用于用户交互式.exe命令。

如果您.exe或任何需要回复的内容,则在ISE中您必须提供回复。

你可以通过尝试任何其他开启互动内容的.exe来轻松证明这不是巧克力。例如,只需输入:

nslookup在脚本窗格和F8中运行它,或在控制台窗格中键入它并按Enter键

无论哪种方式,控制台都会挂起,等待您无法提供的交互式响应。

您仍然可以在PoSH ISE中使用nslookup等交互式命令,但您必须提供所有参数。例如:

nslookup microsoft.com
nslookup -type=mx microsoft.com
nslookup -q=soa microsoft.com

PS 5.1现在甚至会发出错误信息。

NSLOOKUP

无法启动“nslookup”。不支持交互式控制台应用程序。 要运行该应用程序,请使用Start-Process cmdlet或使用“文件”菜单中的“启动PowerShell.exe”。

要查看/修改被阻止的控制台应用程序列表,请使用$ psUnsupportedConsoleApplications,或参阅在线帮助。 在行:0 char:0

您可以通过这种方式轻松地外壳到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