Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AllFunctions.ps1 : curl.exe fails with NativeCommandError in Jenkins #73

Open
andreacuozzo opened this issue Jan 15, 2022 · 2 comments
Open

Comments

@andreacuozzo
Copy link

OSDBuilder version; 21.12.15.1

Command:

Update-OSMedia -execute -Name Windows Server 2019 Datacenter Desktop Experience x64 1809 17763.379 -Download 
-Include SSU,LCU,DotNetCU,AdobeSU

Scenario: I'm using Jenkins to run a powershell script on a remote host. The Update-OSMedia fails with the error below, because the Jenkins environment doesn't handle well the output generated by the curl.exe call in AllFunctions.ps1 starting on line 3054:

if (Get-Command 'curl.exe' -ErrorAction SilentlyContinue) {
    Write-Verbose "cURL: $SourceUrl"
    if ($host.name -match 'ConsoleHost') {
        Invoke-Expression "& curl.exe --insecure --location --output `"$DownloadFullPath`" --url `"$SourceUrl`""
           }
    else {
         #PowerShell ISE will display a NativeCommandError, so progress will not be displayed
         $Quiet = Invoke-Expression "& curl.exe --insecure --location --output `"$DownloadFullPath`" --url `"$SourceUrl`" 2>&1"
            }

Error:

WSUSXML (Microsoft Updates) Download
07/14/2020 17:00:00 - DotNetCU - 2020-07 Cumulative Update for .NET Framework 3.5 4.7.2 and 4.8 for Windows Server 2019 for x64 (KB4566516)
C:\Build\OSDBuilder\Windows2019\Updates\windows10.0-kb4565632-x64-ndp48_8b481763cf07efc55f729bb1e08dc9fe32d3237a.cab
http://download.windowsupdate.com/c/msdownload/update/software/secu/2020/06/windows10.0-kb4565632-x64-ndp48_8b481763cf07efc55f729bb1e08dc9fe32d3237a.cab
C:\Windows\system32\windowspowershell\v1.0\powershell.exe : curl.exe :   % Total    % Received % Xferd  Average Speed  
 Time    Time     Time  Current
At C:\Users\test\AppData\Local\Temp\jenkins6057044616296770173.ps1:2 char:1
+ C:\Windows\system32\windowspowershell\v1.0\powershell.exe -File C:\bu ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (curl.exe :   % ...  Time  Current:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

Workaround (there might be other ones better than this):

the code runs through the ($host.name -match 'ConsoleHost') path, and fails here:

Invoke-Expression "& curl.exe --insecure --location --output "$DownloadFullPath" --url "$SourceUrl""

the workaround is to force it to run through the other "ISE quiet" path that handles the curl.exe output:

$Quiet = Invoke-Expression "& curl.exe --insecure --location --output "$DownloadFullPath" --url "$SourceUrl" 2>&1"

It's been months since I've last used this script of mine, it was working fine on previous OSDBuilder versions: my scenario (Jenkins agent running a script remotely) might be a corner case unworhty of being investigated and fixed, just my 2 cents should anyone else have the same problem.

Andrea

@FLeven
Copy link

FLeven commented Feb 9, 2022

You could always try to da a Invoke-Webrequest, if you are working in powershell.

@andreacuozzo could you share how you manage the import of base images in your Jenkins pipeline ?

@andreacuozzo
Copy link
Author

Thanks FLeven: the Invoke-Expression code snippets is taken from the allfunctions.ps1, called by Update-OSMedia, I'll play with the Invoke-Webrequest, but it seems to me it would still require AllFunctions.ps1 to be changed, and it's probably not worthy for my corner case; as of now I'm just copying my modified version of AllFunctions.ps1 right before calling Update-OSMedia.

I'll soon post on github my attempt at using Jenkins to orchestrate a bunch of powershell scripts in order to generate a vsphere template of Windows 2019 with the latest updates, run some unit tests and a call to the qualys api to make sure the finished product is vulns free (4 and 5 severity, at least). I'll let you know as soon as it's done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants