Многофункциональный скрипт отлично работает в PowerShell, но не в ядре PowerShell.
Следующий код прекрасно работает в PowerShell на Windows Server
$user = "XXXXX"
$pass = "XXXXX"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pass)))
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add('Authorization',('Basic {0}' -f $base64AuthInfo))
$headers.Add('Accept','application/json')
#$FilePath = 'C:\Upload\User Entitlement Export.csv';
$FilePath = '/Users/XXXXXX/Downloads/User Entitlement Export.csv';
$URL = 'https://XXXXXXXXXXX.com/sys_import.do?sysparm_transform_after_load=true&sysparm_import_set_tablename=u_alm_entitlement_user';
$fileBytes = [System.IO.File]::ReadAllBytes($FilePath);
$fileEnc = [System.Text.Encoding]::GetEncoding('UTF-8').GetString($fileBytes);
$boundary = [System.Guid]::NewGuid().ToString();
#$boundary = 'another cool boundary';
$LF = "`r`n";
$bodyLines = (
"--$boundary",
"Content-Disposition: form-data; name=`"file`"; filename=`"User Entitlement Export.csv`"",
"Content-Type: application/octet-stream$LF",
$fileEnc,
"--$boundary--$LF"
) -join $LF
Write-Host $bodyLines;
Invoke-RestMethod -Proxy http://XXXXXXX:8080 -ProxyUseDefaultCredentials -Uri $URL -Method Post -ContentType "multipart/form-data; boundary=`"$boundary`"" -Body $bodyLines -Headers $headers
Но когда я запускаю ядро PowerShell на Mac, я получаю следующую ошибку:
Invoke-RestMethod : The format of value 'multipart/form-data;charset=utf-8;boundary="d0d0dccd-698c-48b8-8770-6bcc7d29f609"' is invalid.
At /Users/laurensbrand/Downloads/uploadCSV.ps1:33 char:1
+ Invoke-RestMethod -Uri $URL -Method Post -ContentType "multipart/form ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Invoke-RestMethod], FormatException
+ FullyQualifiedErrorId : System.FormatException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
Есть идеи, что здесь не так? Очень ценится заранее.
2 ответа
Решением было установить powershell-6.1.0-preview.4-osx-x64. Я использовал powershell-6.0.3-osx-x64.
К сожалению, я не могу проверить это сам, но после небольшого осмотра кажется, что проверка строгого заголовка включена в Core по умолчанию и влияет на веб-командлеты.
Попробуйте использовать переключатель -SkipHeaderValidation
с версией ядра.
Больше информации здесь:
https://github.com/PowerShell/PowerShell/issues/6002
https://get-powershellblog.blogspot.com/2017/11/powershell-core-web-cmdlets-in-depth.html