2017-06-27 11 views
0

このスクリプトの実行中に問題が発生しました。 Err。ヌル配列にインデックスできない アイデアは大きな助けになるでしょう。私は冗長なロギングを見てきましたが、コンテンツを見つけるために計算方法を出力する方法がわかりません。明らかにそれは空であるように見えますが、少なくとも調査のためには始まりになるでしょう。powershellはアレイ経由でセキュリティグループにipsを追加できません

$rgname = "xxxxxx" 
$subscriptionname = "xxxxxx" 
$vmname = "xxxxxx" 

# Get the VM we need to configure 
$vm = Get-AzureRmVM -ResourceGroupName $rgname -Name $vmname 
Write-host "$vm" 

# Get the name of the first NIC in the VM 
$nic = Get-AzureRmNetworkInterface -ResourceGroupName $rgname -Name (Get-AzureRmResource -ResourceId $vm.NetworkInterfaceIDs[0]).ResourceName 

$nsg = Get-AzureRmNetworkSecurityGroup -ResourceGroupName $rgname -Name (Get-AzureRmResource -ResourceId $nic.NetworkSecurityGroup.Id).Name 


$nameAndIPArray = @(("ipname1","ipname2","ipname3","ipname4",ipname5"), 
("ip1,"ip2","ip3","ip4","ip5")) 

#LOOP THE ARRAY AND SET DESCRIPTION AND IP VARIABLE FOR COMMAND 
$priority = 1010 
for ($i=0;$i -lt $nameAndIPArray[0].length; $i++) { 


    $nameAndIPArray[0][$i] + " " + $nameAndIPArray[1][$i] 
    $nsg | Add-AzureRmNetworkSecurityRuleConfig -Name $nameAndIPArray[0][$i] -Description $nameAndIPArray[0][$i] -Access Allow -Protocol Tcp -Direction Inbound -Priority $priority -SourceAddressPrefix $nameAndIPArray[1][$i] -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 443 
    Set-AzureRmNetworkSecurityGroup -NetworkSecurityGroup $nsg 

    $priority = $priority + 10 

} 

Microsoft.Azure.Commands.Compute.Models.PSVirtualMachine 
Cannot index into a null array. 
At line:14 char:1 
Get-AzureRmResource : Cannot validate argument on parameter 'ResourceId'. The argument is null or empty. Provide an argument that is not null or 
empty, and then try the command again. 
Add-AzureRmNetworkSecurityRuleConfig : Cannot bind argument to parameter 'NetworkSecurityGroup' because it is null. 
At line:28 char:12 

Set-AzureRmNetworkSecurityGroup:パラメータ 'NetworkSecurityGroup'に引数をバインドすることができないため、nullです。ラインで :29文字:59

答えて

0

私のラボでテストしますが、スクリプトに間違いがあります。あなたのスクリプトを使用して、私は$nic$nsg値を得ることができませんでした。 $vmには属性NetworkInterfaceIDs[0]がないため、このように使用することはできません。線$nameAndIPArray"を失います。正しい使い方は以下のようにする必要があります:

$nameAndIPArray = @(("ipname1","ipname2","ipname3","ipname4","ipname5"), 
("ip1","ip2","ip3","ip4","ip5")) 

私はあなたのスクリプトを修正し、私はresource group namensg nameを使用して$nsgを取得します。あなたはポータルでそれらを見つけることができます、それは私のために働く。

$nsg= Get-AzureRmNetworkSecurityGroup -ResourceGroupName <resource group name> -Name "<NSG name>" 

$nameAndIPArray = @(("ipname1","ipname2","ipname3","ipname4","ipname5"), 
("10.0.0.4","10.0.0.5","10.0.0.6","10.0.0.7","10.0.0.8")) 

$priority = 1010 
for ($i=0;$i -lt $nameAndIPArray[0].length; $i++) { 


    $nameAndIPArray[0][$i] + " " + $nameAndIPArray[1][$i] 
    $nsg | Add-AzureRmNetworkSecurityRuleConfig -Name $nameAndIPArray[0][$i] -Description $nameAndIPArray[0][$i] -Access Allow -Protocol Tcp -Direction Inbound -Priority $priority -SourceAddressPrefix $nameAndIPArray[1][$i] -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 443 
    Set-AzureRmNetworkSecurityGroup -NetworkSecurityGroup $nsg 

    $priority = $priority + 10 

} 

スクリプトに正しい値を置き換えます。

0

あなたが戻ってすべてのVMを取得されていませんので、私は、これが空の行であると仮定します。

$vm = Get-AzureRmVM -ResourceGroupName $rgname -Name $vmname 

ので、$のVM変数をチェックして、いくつかのVMのが存在する場合これらのパラメータを使用します。

関連する問題