gerardog / gsudo

Sudo for Windows

Home Page:https://gerardog.github.io/gsudo

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Issue: gsudo character limit - The command line is too long

ReversePolishLogic opened this issue · comments

Issue Description

Using gsudo to elevate a command over 3,008 characters long results in a 'The command line is too long' error. (in powershell, I did not try this in any other context) From this documentation I found while researching this issue the actual character limit in practice should be much higher.

Proposed technical details

None, assuming this is a limitation just putting this out here for visibility because I could not find that anyone else encountered this before.

The gsudo { script } syntax has that limitation. Interestingly, the Invoke-Gsudo function works correctly.

  1. Invoke-gsudo wrapper function: (much slower)

    # Pass values (not variables by reference) by prefixing `$using:`. I.E.
    
    $MyString = "Hello World"
    Invoke-Gsudo { Write-Output $using:MyString }  
    
    # Syntax:
    Invoke-Gsudo [-ScriptBlock] <ScriptBlock> 
                 [[-ArgumentList] <Object[]>] 
                 [-InputObject <PSObject>] 
                 [-LoadProfile | -NoProfile] 
                 [-Credential <PSCredential>]
    • PowerShell function.
    • Performs auto serialization of inputs & outputs.
    • You can prefix variables with the $using: scope modifier (like $using:variableName) and their serialized value is applied.
    • Use -LoadProfile or -NoProfile to override profile loading or not.
    • Use -Credential option for Run As User (same as -u but for Get-Credentials).
    • Better forwarding of your current context to the elevated instance (current Location, $ErrorActionPreference)

Closing this issue, can confirm that the Invoke-Gsudo function works correctly in this context.

Shortly after posting this I decided running a command the length of a short story was bad practice and re-wrote my code into a for loop. This presented another issue (using either function) where some, but not all commands in the loop consistently, randomly fail to execute with the following error: (The output seems very similar to #111)

Server Error: Setting token failed.
The operation completed successfully.
Error: Failed to substitute token. Connection from server lost.