从txt文件中读取并转换为托管磁盘

时间:2018-06-01 00:32:49

标签: azure azure-virtual-machine azure-powershell

我在Azure中有一个虚拟机列表,我正在尝试将其转换为托管磁盘。

我有一个vm的列表,我从列表中读取并导出到csv捕获resourcegroupname和vm名称,但是我似乎从整个订阅中获取vms。

当我尝试导入csv时,当我运行$comps时,它会在csv中返回正确的信息,但是我似乎无法将它们传递给下一行。

CSV格式

ResouceGroupName名称 RG-01 vm-01 RG-01 vm-02 RG-01 vm-03 RG-01 vm-04

我正在尝试的代码是

Login-AzureRmAccount

$sub = Get-AzureRmSubscription | ogv -PassThru

Select-AzureSubscription -SubscriptionId $sub

$virtualmachines = Get-Content C:\temp\vm.txt | % {

Get-Azurermvm | select ResourceGroupName,Name | export-csv c:\temp\vm.csv -NoClobber -NoTypeInformation -Append

}

$comps = Import-Csv c:\temp\Vm.csv | 

foreach ($Comp in $comps) 
{

Stop-AzureRmVM -ResourceGroupName $_.ResourceGroupName -Name $_.Name -Force

ConvertTo-AzureRmVMManagedDisk -ResourceGroupName $_.ResourceGroupName -VMName $_.Name

}

提前致谢..

1 个答案:

答案 0 :(得分:2)

对于您的问题,您可以在csv文件中导出虚拟机并在foreach代码中使用它。因此,使用命令是不必要的:

$virtualmachines = Get-Content C:\temp\vm.txt | % {

Get-Azurermvm | select ResourceGroupName,Name | export-csv c:\temp\vm.csv -NoClobber -NoTypeInformation -Append

}

并且您的VM都在资源组中,您可以直接使用ResourceGroupName获取它们。

对于foreach中的管道,这是不必要的。您可以使用以下代码,我对您的代码进行了一些更改,并且运行良好。

Login-AzureRmAccount

$sub = Get-AzureRmSubscription | ogv -PassThru

Select-AzureRmSubscription -Subscription $sub

Get-Azurermvm –ResourceGroupName RG-01 | select ResourceGroupName,Name | export-csv c:\temp\vm.csv -NoClobber -NoTypeInformation -Append

$comps = Import-Csv c:\temp\Vm.csv 

foreach ($Comp in $comps)
{

Stop-AzureRmVM -ResourceGroupName $Comp.ResourceGroupName -Name $Comp.Name -Force

ConvertTo-AzureRmVMManagedDisk -ResourceGroupName $Comp.ResourceGroupName -VMName $Comp.Name

}

这是我的结果截图。

enter image description here