【问题标题】:Read from txt file and convert to managed disks从 txt 文件读取并转换为托管磁盘
【发布时间】:2018-06-01 00:32:49
【问题描述】:

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

我有一个虚拟机列表,我从列表中读取并导出到 csv,捕获资源组名称和虚拟机名称,但是我似乎从整个订阅中获取虚拟机。

此外,当我尝试导入 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

}

提前谢谢..

【问题讨论】:

  • 当我执行以下代码时,我得到了正确的输出
  • $comps = Import-Csv c:\temp\vm1.csv | ForEach-Object { Write-Host $_.ResourceGroupName Name $_.Name }
  • 您似乎没有使用管道中的列表。试试Get-AzureVM -Name $_

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


【解决方案1】:

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

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

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

}

而您的虚拟机都在一个资源组中,您可以直接使用 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

}

这是我的结果截图。

【讨论】:

  • 谢谢查尔斯,太好了,唯一的问题是我举了一个不好的例子,虚拟机分布在多个资源组中,这就是为什么我从包含的文本文件中获取每个资源组的原因只是主机名。
  • 你能告诉我如何使用虚拟机列表中的循环来获取资源组名和虚拟机名吗?喜欢$virtualmachines = Get-Content C:\temp\vm.txt | % { Get-Azurermvm | select ResourceGroupName,Name | export-csv c:\temp\vm.csv -NoClobber -NoTypeInformation -Append } 再次感谢您的帮助:)
  • 如果要过滤不同 ResourceGroup 中的 vm,是否有 vm 或 ResourceGroup 具有相似的标签或名称,以便我们进行过滤。如果没有,将无法过滤它们。
  • 谢谢查尔斯,我想的更像是从文本文件中获取虚拟机的内容列表,然后是 get-azurermvm 和 foreach vm 获取 vmname 和资源组 .. 希望这有意义
  • 如果你想将 vm 列到一个文本文件中。您可以使用命令“Get-Azurermvm –ResourceGroupName RG-01 | select ResourceGroupName,Name | export-csv c:\temp\vm.csv -NoClobber -NoTypeInformation -Append | get-content c:\temp\vm.txt”
猜你喜欢
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多