以下にスクリプト コードがあります。この操作には curl を使用していますが、PowerShell の Invoke-WebRequest を使用して同じことを再現したいと思います。方法を教えてください。
$FX_USER=$args[0]
$FX_PWD=$args[1]
$FX_JOBID=$args[2]
$REGION=$args[3]
$FX_HOST=$args[4]
$runId=$(curl -k --header "Content-Type: application/json;charset=UTF-8" -X POST -d '{}' -u ""${FX_USER}":"${FX_PWD}"" ""${FX_HOST}"/api/v1/runs/job/${FX_JOBID}?region=${REGION}" | jq -r '."data"|."id"')
Write-Host "runId = $runId"
答え1
$FX_USER=$args[0]
$FX_PWD=$args[1]
$FX_JOBID=$args[2]
$REGION=$args[3]
$TAGS=$args[4]
$SUITES=$args[5]
$CATEGORIES=$args[6]
$FX_HOST=$args[7]
Write-Host "user = ${FX_USER}"
Write-Host "region = ${REGION}"
Write-Host "jobid = ${FX_JOBID}"
Write-Host "hostname = ${FX_HOST}"
$pair = "${FX_USER}:${FX_PWD}"
Write-Host "$pair"
$bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
$base64 = [System.Convert]::ToBase64String($bytes)
Write-Host "$base64"
$basicAuthValue = "Basic $base64"
Write-Host "$basicAuthValue"
$headers = @{ Authorization = $basicAuthValue }
Write-Host "$headers"
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
$AllProtocols = [System.Net.SecurityProtocolType]'Ssl3,Tls,Tls11,Tls12'
[System.Net.ServicePointManager]::SecurityProtocol = $AllProtocols
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
$runId=$((Invoke-WebRequest -Uri "${FX_HOST}/api/v1/runs/job/${FX_JOBID}?region=${REGION}" -Headers $headers -Method POST -ContentType "application/json;charset=UTF-8" ) | ConvertFrom-Json | select -expand data | select -expand id)
Write-Host "runId = $runId"
答え2
コマンドレットについて読んで練習し、ヘルプ ファイルの例を試して、完全に理解できましたか?
# get function / cmdlet details
(Get-Command -Name Invoke-WebRequest).Parameters
Get-help -Name Invoke-WebRequest -Full
Get-help -Name Invoke-WebRequest -Online
Get-help -Name Invoke-WebRequest -Examples
Invoke-WebRequest で実行したことが成功したかどうか試してみましたか? どのようなエラーが発生しましたか?
PowerShell は、Invoke-WebRequest のエイリアスとして curl を使用します。もちろん、これらは同じものではないため、同じように複製することはできません。
PSCore (Windows / Linux / OSX) の Web コマンドレットは、PSv5x 以前よりも改善されています。サイト接続の問題が発生しないようにするには、必ず ... を使用してください。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
...コード内で。PSCore は Windows PowerShell と並行して実行するように設計されており、Windows PowerShell を置き換えるものではありません。
コマンドレットの使用 cUrl と Invoke-WebRequest の比較
$headers = @{
'X-JFrog-Art-Api' = $apiKey
"Content-Type" = "application/json"
"Accept" = "application/json"
}
Invoke-WebRequest -InFile $file -Method Put -Uri "$ARTIFACTORY_HOST/third-party/test/readme.md" -Headers $headers -Verbose
curl -T readme.md "${ARTIFACTORY_HOST}/third-party/test/readme.md " \
-H "X-JFrog-Art-Api: ${apiKey}" \
-H "Content-Type: application/json" \
-H "Accept: application/json"
必要に応じて、PowerShellでcurl.exeを直接使用することもできます。他の外部 exe の場合と同じです。