首页 > 解决方案 > 参数为空或空 - 开始作业

问题描述

尝试执行以下命令时出现参数为空错误。有没有办法可以在 start-job 中调用变量

$RG = "xx"
$Location1 = "xx"
$VNET1="xx"
$PublicIP1="xx"
$VNGW1 = "xx"

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

无法验证参数“名称”上的参数。参数为 null 或空。提供一个不为 null 或空的参数,然后重试该命令。

标签: azurepowershell

解决方案


无法验证参数“名称”上的参数。参数为 null 或空。提供一个不为 null 或空的参数,然后重试该命令。

如果没有 Start-Job cmdlet 中的参数列表,我们将无法使用这些变量。

我们已经创建了一个 PowerShell 脚本并在我们的环境中测试了以下脚本,它运行良好。我们可以通过以下两种方式使用 start-job 创建虚拟网络网关:

  1. 使用变量作为参数列表
  2. 在 Start-Job 中使用脚本

使用变量作为参数列表:

  • 首先,我们使用以下 cmdlet 创建了虚拟网络网关的所有依赖资源:
    $subnet = New-AzVirtualNetworkSubnetConfig -Name 'gatewaysubnet' -AddressPrefix '10.254.0.0/27'
    $ngwpip = New-AzPublicIpAddress -Name ngwpip -ResourceGroupName "vnet-gateway" -Location "UK West" -AllocationMethod Dynamic
    $vnet = New-AzVirtualNetwork -AddressPrefix "10.254.0.0/27" -Location "UK West" -Name vnet-gateway -ResourceGroupName "vnet-gateway" -Subnet $subnet
    $subnet = Get-AzVirtualNetworkSubnetConfig -name 'gatewaysubnet' -VirtualNetwork $vnet
    $ngwipconfig = New-AzVirtualNetworkGatewayIpConfig -Name ngwipconfig -SubnetId $subnet.Id -PublicIpAddressId $ngwpip.Id
  • 创建依赖项后,我们使用以下 Start-Job cmdlet 来创建虚拟网络网关:
  $RG = "xx"
  $Location = "xx"
  $gwipconf = "xx"
  $VNGW = "xx"
    
     Start-Job {
    New-AzVirtualNetworkGateway -Name $args[3]  -ResourceGroupName $args[0] -Location $ args[1]  -GatewayType Vpn -VpnType RouteBased -GatewaySku VpnGw1 -Asn 65511  -IpConfigurations $ args[2]  -EnableBgp $True
    } -ArgumentList @($RG, $Location, $gwipconf, $VNGW)

在 Start-Job 中使用脚本:

  • 在这里,我们创建了一个 PowerShell 文件(gateway.ps1)并存储在本地机器中,其中包含依赖资源的创建,然后是虚拟网络网关的创建(使用 start-job)。
New-AzResourceGroup -Location "UK West" -Name "vnet-gateway"
$subnet = New-AzVirtualNetworkSubnetConfig -Name 'gatewaysubnet' -AddressPrefix '10.254.0.0/27'

$ngwpip = New-AzPublicIpAddress -Name ngwpip -ResourceGroupName "vnet-gateway" -Location "UK West" -AllocationMethod Dynamic
$vnet = New-AzVirtualNetwork -AddressPrefix "10.254.0.0/27" -Location "UK West" -Name vnet-gateway -ResourceGroupName "vnet-gateway" -Subnet $subnet
$subnet = Get-AzVirtualNetworkSubnetConfig -name 'gatewaysubnet' -VirtualNetwork $vnet
$ngwipconfig = New-AzVirtualNetworkGatewayIpConfig -Name ngwipconfig -SubnetId $subnet.Id -PublicIpAddressId $ngwpip.Id

New-AzVirtualNetworkGateway -Name myNGW -ResourceGroupName vnet-gateway -Location "UK West" -IpConfigurations $ngwIpConfig  -GatewayType "Vpn" -VpnType "RouteBased" -GatewaySku "Basic" -CustomRoute 192.168.0.0/24
  • 现在,我们已将上述 powershell 脚本文件路径作为参数传递给 Start-job 以创建 VPN 网关:
start-job -filepath \<pathofPowershellScript>

这是参考的示例输出:

在此处输入图像描述


推荐阅读