ScoopInstaller / Install

📥 Next-generation Scoop (un)installer
https://get.scoop.sh
The Unlicense
688 stars 88 forks source link

[Bug] install.ps1 fails via ssh/headless, windows server 2022, ansible #82

Open jaw opened 6 months ago

jaw commented 6 months ago

Bug Report

Current Behavior

Install script fails due to color arguments in the script.

Error message:

{
  "changed": true,
  "debug": [],
  "error": [
    {
      "category_info": {
        "activity": "Write-InstallInfo",
        "category": "InvalidData",
        "category_id": 6,
        "reason": "ParentContainsErrorRecordException",
        "target_name": "",
        "target_type": ""
      },
      "error_details": null,
      "exception": {
        "help_link": null,
        "hresult": -2146233087,
        "inner_exception": null,
        "message": "Cannot process argument transformation on parameter 'ForegroundColor'. Cannot convert null to type \"System.ConsoleColor\" due to enumeration values that are not valid. Specify one of the following enumeration values and try again. The possible enumeration values are \"Black,DarkBlue,DarkGreen,DarkCyan,DarkRed,DarkMagenta,DarkYellow,Gray,DarkGray,Blue,Green,Cyan,Red,Magenta,Yellow,White\".",
        "source": null,
        "type": "System.Management.Automation.ParentContainsErrorRecordException"
      },
      "fully_qualified_error_id": "ParameterArgumentTransformationError,Write-InstallInfo",
      "output": "Write-InstallInfo : Cannot process argument transformation on parameter 'ForegroundColor'. Cannot convert null to type \r\n\"System.ConsoleColor\" due to enumeration values that are not valid. Specify one of the following enumeration values and \r\ntry again. The possible enumeration values are \"Black,DarkBlue,DarkGreen,DarkCyan,DarkRed,DarkMagenta,DarkYellow,Gray,Da\r\nrkGray,Blue,Green,Cyan,Red,Magenta,Yellow,White\".\r\nAt C:\\downloads\\scoop\\install.ps1:555 char:5\r\n+     Write-InstallInfo (\"Initializing...\")\r\n+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n    + CategoryInfo          : InvalidData: (:) [Write-InstallInfo], ParentContainsErrorRecordException\r\n    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Write-InstallInfo\r\n \r\n",

      "pipeline_iteration_info": [],
      "script_stack_trace": "at Install-Scoop, C:\\downloads\\scoop\\install.ps1: line 555\r\nat <ScriptBlock>, C:\\downloads\\scoop\\install.ps1: line 694\r\nat <ScriptBlock>, <No file>: line 2",
      "target_object": null
    }
  ],
  "host_err": "",
  "host_out": "",
  "information": [],
  "output": [],
  "result": {},
  "verbose": [],
  "warning": []
}

Expected Behavior

Not to throw this exception.

Additional context/output

Possible Solution

I worked around this by removing the terminal color code in the Write-InstallInfo function of the install script.

System details

Windows version: Server 2022

OS architecture: 64bit

PowerShell version: 5.1

r15ch13 commented 6 months ago

It seems that $host.UI.RawUI.ForegroundColor returns null with this setup.

https://github.com/ScoopInstaller/Install/blob/656e17b67e8468edc5c5bd51bdad55642a03d9a4/install.ps1#L72-L89

Could you try this modified Write-InstallInfo function?

function Write-InstallInfo {
    param(
        [Parameter(Mandatory = $True, Position = 0)]
        [String] $String,
        [Parameter(Mandatory = $False, Position = 1)]
        [System.ConsoleColor] $ForegroundColor = 'Gray'
    )

    $backup = $host.UI.RawUI.ForegroundColor
    if ($null -eq $backup) {
        $backup = 'Gray'
    }
    if ($null -eq $ForegroundColor) {
        $ForegroundColor = 'Gray'
    }

    if ($ForegroundColor -ne $host.UI.RawUI.ForegroundColor) {
        $host.UI.RawUI.ForegroundColor = $ForegroundColor
    }

    Write-Output "$String"

    $host.UI.RawUI.ForegroundColor = $backup
}
jaw commented 5 months ago

Here is the result:

    {
      "category_info": {
        "activity": "Write-InstallInfo",
        "category": "NotSpecified",
        "category_id": 0,
        "reason": "SetValueInvocationException",
        "target_name": "",
        "target_type": ""
      },
      "error_details": null,
      "exception": {
        "help_link": null,
        "hresult": -2146233087,
        "inner_exception": {
          "help_link": null,
          "hresult": -2146233087,
          "inner_exception": null,
          "message": "A command that prompts the user failed because the host program or the command type does not support user interaction. Try a host program that supports user interaction, such as the Windows PowerShell Console or Windows PowerShell ISE, and remove prompt-related commands from command types that do not support user interaction, such as Windows PowerShell workflows.",
          "source": "System.Management.Automation",
          "type": "System.Management.Automation.Host.HostException"
        },
        "message": "Exception setting \"ForegroundColor\": \"A command that prompts the user failed because the host program or the command type does not support user interaction. Try a host program that supports user interaction, such as the Windows PowerShell Console or Windows PowerShell ISE, and remove prompt-related commands from command types that do not support user interaction, such as Windows PowerShell workflows.\"",
        "source": "System.Management.Automation",
        "type": "System.Management.Automation.SetValueInvocationException"
      },
      "fully_qualified_error_id": "ExceptionWhenSetting,Write-InstallInfo",
      "output": "Write-InstallInfo : Exception setting \"ForegroundColor\": \"A command that prompts the user failed because the host \r\nprogram or the command type does not support user interaction. Try a host program that supports user interaction, such \r\nas the Windows PowerShell Console or Windows PowerShell ISE, and remove prompt-related commands from command types that \r\ndo not support user interaction, such as Windows PowerShell workflows.\"\r\nAt C:\\downloads\\scoop\\scoop_install.ps1:561 char:5\r\n+     Write-InstallInfo \"Initializing...\"\r\n+     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n    + CategoryInfo          : NotSpecified: (:) [Write-InstallInfo], SetValueInvocationException\r\n    + FullyQualifiedErrorId : ExceptionWhenSetting,Write-InstallInfo\r\n \r\n",
      "pipeline_iteration_info": [
        0,
        1
      ],
      "script_stack_trace": "at Write-InstallInfo, C:\\downloads\\scoop\\scoop_install.ps1: line 89\r\nat Install-Scoop, C:\\downloads\\scoop\\scoop_install.ps1: line 561\r\nat <ScriptBlock>, C:\\downloads\\scoop\\scoop_install.ps1: line 700\r\nat <ScriptBlock>, <No file>: line 2",
      "target_object": null
    }
xPancakery commented 5 months ago

I am also getting this error, to validate the other users bug report.