我已经能够使用下面的代码从单个Azure订阅中导出VMData。
$VMs = Get-AzVM
$vmOutput = $VMs | ForEach-Object {
[PSCustomObject]@{
"VM Name" = $_.Name
"VM Profile" = $_.HardwareProfile.VmSize
"VM Type" = $_.StorageProfile.osDisk.osType
"VM Location" = $_.Location
"VM Resource Group Name" = $_.ResourceGroupName -join ','
}
}
$vmOutput | export-csv C:\Azure\VMdata.csv -delimiter ";" -force -notypeinformation
但是,当使用下面的代码尝试从多个订阅中提取并没有结果时。
$azuresubs = Get-AzSubscription
$azureSubs.foreach{
Select-AzSubscription $_
$VMs = Get-AzVM
$vmOutput = $VMs | ForEach-Object {
[PSCustomObject]@{
"VM Name" = $_.Name
"VM Profile" = $_.HardwareProfile.VmSize
"VM Type" = $_.StorageProfile.osDisk.osType
"VM Location" = $_.Location
"VM Resource Group Name" = $_.ResourceGroupName -join ','
}
}
}
$vmOutput | export-csv C:\Azure\VMdata.csv -delimiter ";" -force -notypeinformation
对于Powershell来说,这是我的新手,我确定上面的语法是不正确的,因此非常感谢您的协助。
谢谢
答案 0 :(得分:1)
我认为这里发生的事情是您在每次通过时都覆盖了变量(而最后一次恰好没有vms)。因此您需要附加它,而不是覆盖它。在循环之前定义它:
$vmOutput = @()
然后在循环内附加到它
$vmOutput += $Vms | bla-bla-bla
最终:
$vmOutput = @()
$azuresubs = Get-AzSubscription
$azureSubs.foreach{
Select-AzSubscription $_
$VMs = Get-AzVM
$vmOutput += $VMs | ForEach-Object {
[PSCustomObject]@{
xxx
}
}
}