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

PowerShell执行Start-Job时报argument is null错误,如何在脚本块内引用外部变量

报错根因

Start-Job的脚本块运行在独立的子进程上下文中,默认无法直接访问父会话中定义的变量,所有外部变量在脚本块内默认都是$null,因此会触发参数空校验失败的报错。


解决方法

方法1:使用$using:作用域修饰符(推荐,PowerShell 3.0及以上版本支持)

直接在脚本块内需要引用的外部变量前添加$using:前缀即可,修改后代码示例:

$RG = "xx"
$Location1 = "xx"
$VNET1="xx"
$PublicIP1="xx"
$VNGW1 = "xx"
# 注意你原代码中的$gwipconf1未在外部定义,需先补充完成该变量的赋值
$gwipconf1 = 你的网关IP配置值

Start-Job {
    New-AzVirtualNetworkGateway -Name $using:VNGW1  -ResourceGroupName $using:RG -Location $using:Location1 -GatewayType Vpn -VpnType RouteBased -GatewaySku VpnGw1 -Asn 65511  -IpConfigurations $using:gwipconf1 -EnableBgp $True
}

方法2:使用-ArgumentList传参+param接收(兼容所有PowerShell版本)

通过Start-Job的-ArgumentList参数把外部变量按顺序传入,脚本块内用param块按顺序接收参数即可,修改后代码示例:

$RG = "xx"
$Location1 = "xx"
$VNET1="xx"
$PublicIP1="xx"
$VNGW1 = "xx"
# 同样需要先完成$gwipconf1的赋值
$gwipconf1 = 你的网关IP配置值

Start-Job {
    param($pRG, $pLocation1, $pVNGW1, $pgwipconf1)
    New-AzVirtualNetworkGateway -Name $pVNGW1  -ResourceGroupName $pRG -Location $pLocation1 -GatewayType Vpn -VpnType RouteBased -GatewaySku VpnGw1 -Asn 65511  -IpConfigurations $pgwipconf1 -EnableBgp $True
} -ArgumentList $RG, $Location1, $VNGW1, $gwipconf1

注意事项

  • 原代码中用到的$gwipconf1变量没有在父作用域定义,无论使用哪种方法都需要先完成该变量的赋值,否则仍然会触发空参数报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:27:04