Pete Long
asked on
Cannot index into a null array?
More PowerShell Questions
Hi
Ive got this
However when I run it I get
That means nothing to me (sorry)
What have I done wrong?
Pete
Hi
Ive got this
#Create NIC (called MyNicName)
$nicName = "myNicName"
$nic = New-AzureRmNetworkInterface -Name $nicName `
-ResourceGroupName $rgName `
-Location $location -SubnetId $azvnetworks.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $aznsg.Id
However when I run it I get
Cannot index into a null array.
At line:1 char:1
+ $nic = New-AzureRmNetworkInterface -Name $nicName `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : NullArray
That means nothing to me (sorry)
What have I done wrong?
Pete
Here is an array: $azvnetworks.Subnets[0].Id
where you want element 0, (using index 0).
If the array is empty then there are no elements at all so trying to get one will fail.
First check if $azvnetworks.Subnets does hold data before using it.
where you want element 0, (using index 0).
If the array is empty then there are no elements at all so trying to get one will fail.
First check if $azvnetworks.Subnets does hold data before using it.
ASKER
Thank guys
I'm using these instructions
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/create-vm-specialized
On THAT example that string is called $vnet
in my example its called $azvnetworks
Which I populated earlier by doing this;
Pete
I'm using these instructions
https://docs.microsoft.com/en-us/azure/virtual-machines/windows/create-vm-specialized
On THAT example that string is called $vnet
in my example its called $azvnetworks
Which I populated earlier by doing this;
$azvnetworks = Read-Host -Prompt 'Enter Virtual Netwotk NAME (from above);'
Pete
ASKER
Ah OK I think I see the problem that is populated with this
I dont need to create one because I already have one!! (called Main-LAN)
SO I need to put that information into the Array?
If so How Do I do that (sorry Im at the limit of my PowerShell here)
$vnet = New-AzureRmVirtualNetwork `
-Name $vnetName -ResourceGroupName $destinationResourceGroup `
-Location $location `
-AddressPrefix 10.0.0.0/16 `
-Subnet $singleSubnet
I dont need to create one because I already have one!! (called Main-LAN)
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Get-AzureRmVirtualNetwork
WARNING: Breaking changes in the cmdlet 'Get-AzureRmVirtualNetwork' :
WARNING: - "The output type 'Microsoft.Azure.Commands.Network.Models.PSVirtualNetwork' is changing"
- The following properties in the output type are being deprecated :
'EnableVmProtection'
ResourceGroupName Name Location ProvisioningState EnableDdosProtection EnableVmProtection
----------------- ---- -------- ----------------- -------------------- ------------------
RG-Test-Lab Main-LAN uksouth Succeeded False False
SO I need to put that information into the Array?
If so How Do I do that (sorry Im at the limit of my PowerShell here)
ASKER
So I would need to GET my Virtual Network (already in my script called $azvnetworks )
And feed in
-Name $azvnetworks
-Location $location (already populated)
-AddressPrefix 10.0.0.0/16 (is the same)
-Subnet $azsubnet (already populated)
And feed in
-Name $azvnetworks
-Location $location (already populated)
-AddressPrefix 10.0.0.0/16 (is the same)
-Subnet $azsubnet (already populated)
Assuming the other variables in your first script are already populated, try this:
# $rgName = ...
# $location = ...
# $aznsg = ...
# $pip = ...
$azvnetworks = Get-AzureRmVirtualNetwork -Name 'Main-LAN'
#Create NIC (called MyNicName)
$nicName = "myNicName"
$nic = New-AzureRmNetworkInterface `
-Name $nicName `
-ResourceGroupName $rgName `
-Location $location `
-SubnetId $azvnetworks.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $aznsg.Id
ASKER
Hi oBda
$azvnetworks already contains 'Main-LAN"
I'm trying to write this so that it can be used for many different scenarios - having the name of my Virtual Test network in the script will negate that
(background: This script connects the VMware Center locally via PowerCLI - downloads a selected VM converts it from VMDK to VHD then uploads it into Aure and creates a VM) it's the creating the VM part I'm struggling with, everything else works ok, for each piece of information required, it lists all the options and asks you to input the one you want, thats why $aznetworks is already populated, the person running the script picked and entered it)
Would it not be better to do something like
$azvnetworkTEMP = Get-AzureRmVirtualNetwork {where name is equal to $azvnetwork}
Whatever the code would be for that?
Does that make sense?
</P>
$azvnetworks already contains 'Main-LAN"
I'm trying to write this so that it can be used for many different scenarios - having the name of my Virtual Test network in the script will negate that
(background: This script connects the VMware Center locally via PowerCLI - downloads a selected VM converts it from VMDK to VHD then uploads it into Aure and creates a VM) it's the creating the VM part I'm struggling with, everything else works ok, for each piece of information required, it lists all the options and asks you to input the one you want, thats why $aznetworks is already populated, the person running the script picked and entered it)
Would it not be better to do something like
$azvnetworkTEMP = Get-AzureRmVirtualNetwork {where name is equal to $azvnetwork}
Whatever the code would be for that?
Does that make sense?
</P>
Of course you can do that. You can either use
$azvnetworks = Get-AzureRmVirtualNetwork (Read-Host -Prompt 'Enter Virtual Netwotk NAME (from above);')
(and not change anything on the other lines) if you do not need the name again, or if you do$azvnetworks = Read-Host -Prompt 'Enter Virtual Netwotk NAME (from above);'
$azvnetworksTemp = Get-AzureRmVirtualNetwork $azvnetworks
and then refer to that new var below that lines.
ASKER
Hi Qlemo
Thanks for the follow up
If I do that then all the other pieces wont go into the array? will they?
-ResourceGroupName $rgName `
-Location $location `
-SubnetId $azvnetworks.Subnets[0].Id `
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $aznsg.Id
Forgive me Im a firewall engineer script/code is not my thing?
P
Thanks for the follow up
If I do that then all the other pieces wont go into the array? will they?
-ResourceGroupName $rgName `
-Location $location `
-SubnetId $azvnetworks.Subnets[0].Id
-PublicIpAddressId $pip.Id `
-NetworkSecurityGroupId $aznsg.Id
Forgive me Im a firewall engineer script/code is not my thing?
P
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER
Thanks for putting me straight :)
$vnet = Get-AzureRmVirtualNetwork -Name $azvnetworks
Threw an error, it needs the ResourceGroupName as well
$vnet = Get-AzureRmVirtualNetwork -Name $azvnetworks -ResourceGroupName $aznsg
Thanks again
P
$vnet = Get-AzureRmVirtualNetwork -Name $azvnetworks
Threw an error, it needs the ResourceGroupName as well
$vnet = Get-AzureRmVirtualNetwork -Name $azvnetworks -ResourceGroupName $aznsg
Thanks again
P
Any decent programming language will not let you perform operation with a null object.
You see [0] (square brackets and a number within), it is a way for programming language to inspect members of an array.
I think your variable, $azvnetworks.Subnets is not populated with a value and as it is a null indexing operation cannot be performed and hence the error.
How are you getting $azvnetworks? Can you share the complete script?
Regards,
Chinmay.