2015-03-11 4 views
1

Я хочу перечислить все azure vms в определенной подсети. Я не знаю, как написать сценарий PowerShell для этого. Я пытаюсь сделать это ниже, но это не дает желаемого результата. Мои желательно output- Все виртуальные машины, принадлежащие к подсети, имеющие IP 10.87.00.01 ... 10.87.99.99 должны получить перечисленные в моем текстовом файле subnet_VM.txtСписок всех azure vm, принадлежащих определенной подсети

$tgtIP = "10.87.xx.xx" 
$vms = Get-AzureVM 

foreach($vm in $vms) 
{ 
    $vmIP = (Get-AzureVM -ServiceName $vm.ServiceName –Name $vm.Name).IpAddress 
    foreach($ip in $vmIP) 
    { 
    if($ip -like '$tgtIP*') 
    { 
     $vm.Name > C:\AZURE\subnet_VM.txt 
    } 
    } 
} 

Было бы очень полезно, если бы я получить помощь по этому вопросу , Заранее спасибо.

+0

Помогает ли вам просто изменить этот '$ tgtIP =" 10.87 "'? На данный момент вы пытаетесь сопоставить ip с 'xx', который, очевидно, никогда не будет работать – arco444

+0

@ arco44 -Это также не сработало – Atf

+0

Вам нужно отредактировать вопрос до ** a) ** описать желаемый результат ** b) ** объясните, что именно «не работает» – arco444

ответ

1

Обратите внимание, что в Azure подсетей есть имя. Таким образом, более элегантным решением будет использование имени подсети, чем необработанный диапазон IP. Поскольку это то, чего вы в конечном итоге пытаетесь достичь, я включаю это решение.

$vms = Get-AzureVM 

$tgtSubnet = "Subnet-1" 
foreach($vm in $vms) 
{ 
    $thisVM = Get-AzureVM -ServiceName $vm.ServiceName –Name $vm.Name 
    $thisVMSubnet = Get-AzureSubnet -VM $thisVM 
    if ($thisVMSubnet -eq $tgtSubnet) 
    { 
     $output =$output + "`r`n" + $thisVM.Name 
    } 
} 
$output | Out-File C:\Azure\subnet_VM.txt 
+0

Спасибо Shawn, этот работал для меня. – Atf