Chocolatey与PowerShell cmdlets不兼容

4

所以,我成功安装并运行了chocolatey。但是,我注意到cmdlets不起作用。也就是说,如果尝试使用choco命令执行任何操作,例如:choco install vlc,它可以正常工作。但是,如果我尝试使用传统的cmdlets,例如:Install-Package -Name vlc -Source chocolatey,它会一直给出有关找不到chocolatey-core.extension的警告。

字面上的消息是:

WARNING: NuGet: System.InvalidOperationException: Unable to find version '1.3.5.1' of package
'chocolatey-core.extension'.
WARNING: NuGet:    at NuGet.PackageRepositoryHelper.ResolvePackage(IPackageRepository sourceRepository,
IPackageRepository localRepository, IPackageConstraintProvider constraintProvider, String packageId,
SemanticVersion version, Boolean allowPrereleaseVersions)
WARNING: NuGet:    at NuGet.PackageManager.InstallPackage(String packageId, SemanticVersion version,
Boolean ignoreDependencies, Boolean allowPrereleaseVersions)
WARNING: NuGet:    at NuGet.Commands.InstallCommand.InstallPackage(IFileSystem fileSystem, String
packageId, SemanticVersion version)
WARNING: NuGet:    at NuGet.Program.Main(String[] args)
WARNING: NuGet: System.InvalidOperationException: Unable to find version '3.0.11' of package 'vlc'.

非常抱歉,这可能是一个有点琐碎的问题,但我已经尝试了相当长一段时间,但它仍无法正常工作,真的让我很不爽。我按照chocolatey网站上的安装过程进行操作,并取消注册再注册chocolatey作为软件包来源。另外,如果我尝试更新它,它会说我已经运行了最新版本(对于Power Shell和Choco均是如此)。这正常吗?我应该忘记它吗?……说真的,我做错了什么?


当你运行 Get-PackageSource 命令时,会得到什么? - marsze
此外,您可能需要先安装 chocolatey-core.extension?免责声明:我对此毫无经验,这只是猜测。 - marsze
我有两个提供程序,分别是Chocolatey和PSGallery。至于核心扩展,它也存在相同的问题,使用cmdlets会出现完全相同的错误。但是,如果我使用“choco”命令,它会说已经安装了。这可能是路径问题吗? - Ahmed Appas
1个回答

1

我也遇到了这个问题。看起来这是NuGet和TLS 1.3的问题。虽然我不确定第一组命令是否必要,但运行它们都可以解决这个问题。

禁用TLS 1.3

New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server' -Force | Out-Null

New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server' -name 'Enabled' -value '0' -PropertyType 'DWord' -Force | Out-Null

New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server' -name 'DisabledByDefault' -value 1 -PropertyType 'DWord' -Force | Out-Null

New-Item 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client' -Force | Out-Null

New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client' -name 'Enabled' -value '0' -PropertyType 'DWord' -Force | Out-Null

New-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Client' -name 'DisabledByDefault' -value 1 -PropertyType 'DWord' -Force | Out-Null

改变 .Net Framework 的默认 TLS 版本。
reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:64
reg add HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319 /v SystemDefaultTlsVersions /t REG_DWORD /d 1 /f /reg:32

如果只需要第二组命令就可以解决问题,那么您可以先尝试执行它们,我会更新这个答案。

来源


很奇怪,运行了两个更改.NET Framework默认TLS的cmdlet后,错误消息停止显示了,但这些命令根本没有执行任何操作,除了显示包的名称、版本、来源和摘要之外。没有安装、卸载或任何其他操作执行,所有的cmdlet现在都只显示包信息。之后我使用了禁用TLS 1.3的cmdlet,但是没有任何效果,它们完全没有起到作用... - Ahmed Appas
所有来自 Choco 的 VLC 都是安装程序。前往 c:\chocolaty 并在 bin 文件夹中,您将看到 VLC 和用于安装它的批处理文件。尝试使用 Chocolatey 中实际安装的不同应用程序。 - Doug Maurer
我也尝试了Sysinternals、Atom和GIMP,但结果都一样。在C:\chocolatey\lib目录下添加了一个以软件名称命名的文件夹,其中包含一个**.nupkg**文件和一个"tools"文件。在所有情况下,"tools"文件中都包含一个名为chocolateyinstall.ps1的文件。此外,在\bin文件夹中没有任何内容,这些软件包都可以使用choco installchoco uninstall正常安装和卸载。 - Ahmed Appas
我安装了Bluescreenview并成功安装了该应用程序。 - Doug Maurer
你的帖子并没有讨论“install-package”是否与“choco install”执行相同的操作。问题在于能否成功运行该命令并完成任务。添加-Verbose以确认它是否正在执行之前未执行的任何操作。然后,您可以向Chocolatey的制造商询问这是否是他们为cmdlet打算的内容。运行Install-Package -Name vlc -source chocolatey -Verbose应该可以确认它已成功完成。 - Doug Maurer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接