PowerShellGetv2 icon indicating copy to clipboard operation
PowerShellGetv2 copied to clipboard

Register-PSRepository and Register-PackageSource are unable to work correctly on Debian 11

Open MFunction96 opened this issue 1 year ago • 5 comments

Prerequisites

Steps to reproduce

  1. Install .NET 6, .NET 7 and Powershell correctly by following official documents on a clean Debian 11.
  2. Follow the document to connect to feed as a Powershell repository.

Expected behavior

Register Powershell repository correctly. 
The commands related to the repository work fine, such as Find-Module.
The result on Debian 11 is same as the one on Windows.

Actual behavior

Registered Powershell repository correctly on Windows only BUT something went wrong on Debian 11.
Throw the following error again and again on the Debian console.


Could not execute because the specified command or file was not found.
Possible reasons for this include:
  * You misspelled a built-in dotnet command.
  * You intended to execute a .NET program, but dotnet--V does not exist.
  * You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.

Error details

Exception             : lt-in dotnet command.
    Type        : System.Management.Automation.CommandNotFoundExceptiont.
    ErrorRecord : o run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.
        Exception             : ecified command or file was not found.
            Type    : System.Management.Automation.ParentContainsErrorRecordException
            Message : The term 'NuGet.exe' is not recognized as a name of a cmdlet, function, script file, or executable program.
                      Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
            HResult : -2146233087tool, but a dotnet-prefixed executable with this name could not be found on the PATH.
        TargetObject          : NuGet.exe
        CategoryInfo          : ObjectNotFound: (NuGet.exe:String) [], ParentContainsErrorRecordException
        FullyQualifiedErrorId : CommandNotFoundException
    CommandName : NuGet.exe
    Message     : The term 'NuGet.exe' is not recognized as a name of a cmdlet, function, script file, or executable program.
                  Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
    HResult     : -2146233087
TargetObject          : NuGet.exe
CategoryInfo          : ObjectNotFound: (NuGet.exe:String) [Get-Command], CommandNotFoundException
FullyQualifiedErrorId : CommandNotFoundException,Microsoft.PowerShell.Commands.GetCommandCommand
InvocationInfo        : 
    MyCommand        : Get-Command
    ScriptLineNumber : 11590
    OffsetInLine     : 21
    HistoryId        : 18
    ScriptName       : /opt/microsoft/powershell/7/Modules/PowerShellGet/PSModule.psm1
    Line             : $nugetCmd = Microsoft.PowerShell.Core\Get-Command -Name $script:NuGetExeName `
                       
    PositionMessage  : At /opt/microsoft/powershell/7/Modules/PowerShellGet/PSModule.psm1:11590 char:21
                       + … $nugetCmd = Microsoft.PowerShell.Core\Get-Command -Name $script:NuGet …
                       +               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    PSScriptRoot     : /opt/microsoft/powershell/7/Modules/PowerShellGet
    PSCommandPath    : /opt/microsoft/powershell/7/Modules/PowerShellGet/PSModule.psm1
    InvocationName   : Microsoft.PowerShell.Core\Get-Command
    CommandOrigin    : Internal
ScriptStackTrace      : at Register-PSRepository<Process>, /opt/microsoft/powershell/7/Modules/PowerShellGet/PSModule.psm1: line 11590
                        at <ScriptBlock>, <No file>: line 1
PipelineIterationInfo :

Environment data

Name                           Value
----                           -----
PSVersion                      7.3.2
PSEdition                      Core
GitCommitId                    7.3.2
OS                             Linux 5.10.0-21-amd64 PowerShell/PowerShell#1 SMP Debian 5.10.162-1 (2023-01-21)
Platform                       Unix
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Visuals

On Windows and expected: image

On Debian 11 and actual: image

MFunction96 avatar Jan 28 '23 09:01 MFunction96

Thanks for opening this issue @MFunction96! This seems more like an issue with PowerShellGet, tagging @alerickson and @anamnavi

StevenBucher98 avatar Jan 30 '23 18:01 StevenBucher98

Hi @MFunction96, could you run dotnet --version? If dotnet is not installed you can find instructions on how to install it here. Please make sure the dotnet executable is under the $env:PATH environment variable as well.

alerickson avatar Jan 30 '23 19:01 alerickson

Hi @alerickson. Thanks for your reply! I had installed .NET 6 and .NET 7 properly on Linux refer to the reproduce step. image

It is clear reason that some procedures inside Register-PSRepository and Register-PackageSource invoked Nuget.exe directly on Linux by Error Detail. Unfortunately, Nuget.exe is not an executable binary on Linux so that it should not be invoked directly on Linux. We should use dotnet nuget <command> on Linux instead of Nuget.exe <command> as far as I know.

MFunction96 avatar Jan 31 '23 08:01 MFunction96

I noticed that #677 might be the same issue on Linux environment. The error message seems to be similar with mine.

MFunction96 avatar Jan 31 '23 08:01 MFunction96

@MFunction96 thanks for sharing this info, we'll investigate into this.

anamnavi avatar Feb 06 '23 19:02 anamnavi