如何将指定curl POST命令转换为使用Invoke-WebRequest的PowerShell命令
curl命令转Invoke-WebRequest PowerShell命令方案
参数对应关系
先明确原curl各参数对应的PowerShell实现逻辑:
-s(静默模式,隐藏进度输出):设置$ProgressPreference = 'SilentlyContinue',搭配-UseBasicParsing参数跳过HTML DOM解析减少冗余输出-k(忽略SSL证书校验):PowerShell 5.1及更低版本需临时配置证书信任策略,PowerShell 7+可直接使用-SkipCertificateCheck参数-X POST:对应-Method Post参数指定请求方法-u 'xxx':'xxx'(基础身份认证):通过构建PSCredential对象传入-Credential参数,或手动构造Basic认证请求头
完整实现代码
适配PowerShell 5.1及以上所有版本
# 临时禁用SSL证书校验(对应原curl -k参数,仅当前会话生效) 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; } } "@ [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy # 关闭请求进度条输出(对应原curl -s参数) $ProgressPreference = 'SilentlyContinue' # 替换为实际的账号密码 $username = 'xxx' $password = ConvertTo-SecureString 'xxx' -AsPlainText -Force $credential = New-Object System.Management.Automation.PSCredential ($username, $password) # 发送POST请求 $response = Invoke-WebRequest -Uri "https://xxxx/rest/com/vmware/cis/session" ` -Method Post ` -Credential $credential ` -UseBasicParsing # 输出返回结果,可按需调整处理逻辑 $response.Content
适配PowerShell 7+ 简化版本
PowerShell 7及以上版本原生支持跳过证书校验参数,无需额外配置证书策略:
$ProgressPreference = 'SilentlyContinue' # 替换为实际的账号密码 $username = 'xxx' $password = ConvertTo-SecureString 'xxx' -AsPlainText -Force $credential = [System.Management.Automation.PSCredential]::new($username, $password) # 发送POST请求 $response = Invoke-WebRequest -Uri "https://xxxx/rest/com/vmware/cis/session" ` -Method Post ` -Credential $credential ` -UseBasicParsing ` -SkipCertificateCheck # 对应原curl -k参数 # 输出返回结果,可按需调整处理逻辑 $response.Content
补充说明
- 提取VMware接口返回的会话ID可使用以下代码:
$sessionId = ($response.Content | ConvertFrom-Json).value
- 若使用
-Credential参数出现认证失败,可替换为手动构造认证头的方式:
# 替换原有Credential配置段 $base64Auth = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("${username}:${password}")) $headers = @{ Authorization = "Basic $base64Auth" } # 请求时删除-Credential参数,替换为 -Headers $headers
内容的提问来源于stack exchange,提问作者TomTom30
相关产品推荐
相关产品推荐

