Description
By default Windows does not support paths > 260 characters. When trying to converge a cookbook that contains an embedded DSC resource, using policyfiles for dependency management, and testing using Test Kitchen an error occurs:
E, [2019-08-02T13:50:01.481897 #48646] ERROR -- tk-win16cor: Message: [WinRM::FS::Core::FileTransporter] Upload failed (exitcode: 0), but stderr present
Error HRESULT E_FAIL has been returned from a call to a COM component.
+ CategoryInfo : OperationStopped: (:) [Invoke-Expression], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Microsoft.PowerShell.Commands.InvokeExpressionCommand
This exception is being thrown by the extract_files.ps1 script. This COM call is hidden beneath layers of try/catch blocks and is hiding the actual error. After troubleshooting we found the underlying error:
Exception calling "ExtractToDirectory" with "2" argument(s) : "Could not find a part of the path 'C:\Users\Administrator\AppData\local\Temp\winrm-upload\tmpzip-856e18bfe2g171640fd43 a42gdcg5562gecb1e2\mitre_win_security-e0c717650c8f0ab2f3c6e0c3e4ca1a755d5479f8\files\default\cSecurityOptions\3.1.2\DSCResources\AccountAndBasicAuditing\AccountAndBasicAuditing.psm1'."
That path is longer than 260 characters and cannot be unzipped in standard Windows.
Environment
Test Kitchen target: Windows Server 2016 Core running in vcenter
Suggested fix
For current customers: https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#enable-long-paths-in-windows-10-version-1607-and-later
Enhancement to winrm-fs: echo to stdout any caught exceptions in the try/catch logic of extract_files.ps1. Cannot echo to stderr because that would cause the run to fail via
|
elsif stderr != '\r\n' && stderr != '' |
Description
By default Windows does not support paths > 260 characters. When trying to converge a cookbook that contains an embedded DSC resource, using policyfiles for dependency management, and testing using Test Kitchen an error occurs:
This exception is being thrown by the
extract_files.ps1script. This COM call is hidden beneath layers of try/catch blocks and is hiding the actual error. After troubleshooting we found the underlying error:That path is longer than 260 characters and cannot be unzipped in standard Windows.
Environment
Test Kitchen target: Windows Server 2016 Core running in vcenter
Suggested fix
For current customers: https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file#enable-long-paths-in-windows-10-version-1607-and-later
Enhancement to winrm-fs: echo to stdout any caught exceptions in the try/catch logic of
extract_files.ps1. Cannot echo to stderr because that would cause the run to fail viawinrm-fs/lib/winrm-fs/core/file_transporter.rb
Line 401 in 2ecb6e8