You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本触发Jenkins作业报错求助:远程解析失败与空引用异常

问题:PowerShell触发Jenkins作业时出现错误

脚本内容

$UserName = "user"
$Password = "password"
$API_URL = "https://jenkinsservername"
$JobName = "firstjob"
$JobToken = "generatedtoken"
$header = @{}
$header.Add('Authorization', 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$(${UserName}):$(${Password})")))
$Params = @{uri = "${API_URL}/crumbIssuer/api/json";
        Method = 'Get';
        Headers = $header;}
$API_Crumb = Invoke-RestMethod @Params
write-host $API_Crumb
$h.Add('Jenkins-Crumb', $API_Crumb.crumb)
$Params['uri'] = "https://jenkinsservername/$JobName/build?token=$JobToken"
$Params['Method'] = 'Post'
$Params['Headers'] = $header
Invoke-RestMethod @Params

执行错误信息

Invoke-RestMethod : 远程名称无法解析: 'https'
At C:\path\to\script.ps1:12 char:14

  • $API_Crumb = Invoke-RestMethod @Params1
    ~~~~~~~~~~~~~~~~~~~~~~~~~~
    • CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    • FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

Invoke-RestMethod : 对象引用未设置到对象的实例。
At C:\path\to\script.ps1:19 char:1

  • Invoke-RestMethod @Params2 -WebSession $Session
    • CategoryInfo : NotSpecified: (:) [Invoke-RestMethod], NullReferenceException
    • FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

解决方案

1. 解决“远程名称无法解析: 'https'”错误

  • 替换占位符:$API_URL里的jenkinsservername是占位符,必须换成Jenkins服务器实际的域名、IP或带端口的完整可访问URL,比如https://jenkins.example.com或https://192.168.1.100:8080(Jenkins非默认443端口时需补充端口)
  • 验证网络连通性:在运行脚本的机器上,执行Test-NetConnection 你的Jenkins服务器地址 -Port 对应端口,确认能正常连接到Jenkins服务
  • 检查URL格式:确保$API_URL无多余空格、拼写错误,不要漏写https://前缀

2. 解决“对象引用未设置到对象的实例”错误

脚本中$h.Add('Jenkins-Crumb', $API_Crumb.crumb)的$h是未定义变量,需替换为之前创建的$header变量;同时建议复用$API_URL变量避免硬编码重复URL,修改后对应代码如下:

$header.Add('Jenkins-Crumb', $API_Crumb.crumb)
$Params['uri'] = "${API_URL}/${JobName}/build?token=$JobToken"

优化后的完整脚本

$UserName = "你的实际用户名"
$Password = "你的实际密码"
$API_URL = "https://你的Jenkins服务器地址:端口" # 替换为真实Jenkins地址
$JobName = "firstjob"
$JobToken = "你的生成令牌"

$header = @{}
$authString = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("$UserName`:$Password"))
$header.Add('Authorization', "Basic $authString")

# 获取Crumb
$Params = @{
    uri     = "${API_URL}/crumbIssuer/api/json"
    Method  = 'Get'
    Headers = $header
}
$API_Crumb = Invoke-RestMethod @Params
$header.Add('Jenkins-Crumb', $API_Crumb.crumb)

# 触发Jenkins作业
$Params['uri'] = "${API_URL}/${JobName}/build?token=$JobToken"
$Params['Method'] = 'Post'

Invoke-RestMethod @Params

内容的提问来源于stack exchange,提问作者user17095978

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 21:33:19