将第二个Invoke-WebRequest导入中的数据添加到现有数组中

问题描述 投票:0回答:1

我对powershell相当新,我的脚本问题是将第二个Invoke-WebRequest中的数据添加到现有数组$ arr1中。

第二次导入变量$ annotations工作正常。然后我需要匹配$ vm.Name = $ annotations.Name,以便最终的ForEach($ vm in $ vms)工作并拉入注释数据但是卡住了。

我的代码如下。请帮忙

$StorageSystemName = "storageName"
$StoragePoolName = "storagepool"
$ReportName = "~\Reports\ServerList_$((Get-Date).ToString('yyyy-MM-dd')).xlsx"

Invoke-WebRequest -Uri http://srv1/location/Report_volume_storage.csv -OutFile .\Report_volume_storage.csv
$luns = Import-Csv .\Report_volume_storage.csv -Delimiter ";" | 
    Where-Object {$_.'Storage System name' -eq $StorageSystemName -and $_.'Storage Pool Name' -eq $StoragePoolName -and $_.'Volume Name'} | 
    Sort-Object "Storage Pool Name", "Volume Name" 

Invoke-WebRequest -Uri http://srv2/addmdata/addmdata.csv -OutFile .\addmdata.csv
$annotations = Import-Csv .\addmdata.csv -Delimiter "," | 
    Select @{n='Name';e={$_.name.Split('.')[0]}}, * -Exclude Name,
        @{n="Annotationserverdescription";e={$_.'Server Description'}},
        @{n="Annotationapowner";e={$_.'Annotationapowner (Annotationappowner)'}},
        @{n="Annotationclient";e={$_.'Client'}}
    Sort-Object Name

$arr1 = @()

ForEach($lun in $luns)
{
    $dsnaa = $lun.'LUN UID'
    $dsnaa = "*$dsnaa*"

    $datastore = Get-Datastore | 
        Where {($_.ExtensionData.Info.Vmfs.Extent).DiskName -like $dsnaa}
    $VMs = @()
    $datastore | ForEach-Object {
        $dstore = $_.name
        $VMs += get-VM -datastore $dstore | Where {$_.PowerState -eq "PoweredOn"} | Select @{n="Name";e={$_.name}}, @{n="PowerState";e={$_.PowerState}}, @{n="Datastore_Name";e={$dstore}}
}

    ForEach($vm in $vms)
    {

        $data = New-Object System.Object

        $data | Add-Member -MemberType NoteProperty -Name "Name" -Value $vm.Name
        $data | Add-Member -MemberType NoteProperty -Name "PowerState" -Value $vm.PowerState
        $data | Add-Member -MemberType NoteProperty -Name "Annotationserverdescription" -Value $annotation.'Server Description'
        $data | Add-Member -MemberType NoteProperty -Name "Annotationapowner" -Value $annotation.'Annotationapowner (Annotationappowner)'
        $data | Add-Member -MemberType NoteProperty -Name "Annotationclient" -Value $annotation.Client
        $data | Add-Member -MemberType NoteProperty -Name "Volume Name" -Value $lun.'Volume Name'
        $data | Add-Member -MemberType NoteProperty -Name "LUN UID" -Value $lun.'LUN UID'
        $data | Add-Member -MemberType NoteProperty -Name "Capacity (GiB)" -Value $lun.'Capacity (GiB)'       
        $data | Add-Member -MemberType NoteProperty -Name "Storage Pool Name" -Value $lun.'Storage Pool Name'
        $data | Add-Member -MemberType NoteProperty -Name "Storage System name" -Value $lun.'Storage System name'
        $data | Add-Member -MemberType NoteProperty -Name "Storage Tier" -Value $lun.'Storage Tier'

        $arr1 += $data

    }

}

    $arr1 | Export-Excel $ReportName
powershell for-loop vmware powercli
1个回答
0
投票

您可以执行以下操作:

$StorageSystemName = "storageName"
$StoragePoolName = "storagepool"
$ReportName = "~\Reports\ServerList_$((Get-Date).ToString('yyyy-MM-dd')).xlsx"

Invoke-WebRequest -Uri http://srv1/location/Report_volume_storage.csv -OutFile .\Report_volume_storage.csv
$luns = Import-Csv .\Report_volume_storage.csv -Delimiter ";" | 
    Where-Object {$_.'Storage System name' -eq $StorageSystemName -and $_.'Storage Pool Name' -eq $StoragePoolName -and $_.'Volume Name'} | 
    Sort-Object "Storage Pool Name", "Volume Name" 

Invoke-WebRequest -Uri http://srv2/addmdata/addmdata.csv -OutFile .\addmdata.csv
$annotations = Import-Csv .\addmdata.csv -Delimiter "," | 
    Select @{n='Name';e={$_.name.Split('.')[0]}}, * -Exclude Name,
        @{n="Annotationserverdescription";e={$_.'Server Description'}},
        @{n="Annotationapowner";e={$_.'Annotationapowner (Annotationappowner)'}},
        @{n="Annotationclient";e={$_.'Client'}}
    Sort-Object Name

$arr1 = @()

ForEach($lun in $luns)
{
    $dsnaa = $lun.'LUN UID'
    $dsnaa = "*$dsnaa*"

    $datastore = Get-Datastore | 
        Where {($_.ExtensionData.Info.Vmfs.Extent).DiskName -like $dsnaa}
    $VMs = @()
    $datastore | ForEach-Object {
        $dstore = $_.name
        $VMs += get-VM -datastore $dstore | Where {$_.PowerState -eq "PoweredOn"} | Select @{n="Name";e={$_.name}}, @{n="PowerState";e={$_.PowerState}}, @{n="Datastore_Name";e={$dstore}}
}

    ForEach($vm in $vms)
    {
        $ActiveAnnotation = $null
        $ActiveAnnotation = $annotations | where-object {$_.name -eq $vm.name}
        $data = New-Object System.Object

        $data | Add-Member -MemberType NoteProperty -Name "Name" -Value $vm.Name
        $data | Add-Member -MemberType NoteProperty -Name "PowerState" -Value $vm.PowerState
        $data | Add-Member -MemberType NoteProperty -Name "Annotationserverdescription" -Value $ActiveAnnotation.'Server Description'
        $data | Add-Member -MemberType NoteProperty -Name "Annotationapowner" -Value $ActiveAnnotation.'Annotationapowner (Annotationappowner)'
        $data | Add-Member -MemberType NoteProperty -Name "Annotationclient" -Value $ActiveAnnotation.Client
        $data | Add-Member -MemberType NoteProperty -Name "Volume Name" -Value $lun.'Volume Name'
        $data | Add-Member -MemberType NoteProperty -Name "LUN UID" -Value $lun.'LUN UID'
        $data | Add-Member -MemberType NoteProperty -Name "Capacity (GiB)" -Value $lun.'Capacity (GiB)'       
        $data | Add-Member -MemberType NoteProperty -Name "Storage Pool Name" -Value $lun.'Storage Pool Name'
        $data | Add-Member -MemberType NoteProperty -Name "Storage System name" -Value $lun.'Storage System name'
        $data | Add-Member -MemberType NoteProperty -Name "Storage Tier" -Value $lun.'Storage Tier'

        $arr1 += $data

    }

}

    $arr1 | Export-Excel $ReportName

我在你的VM循环中添加了$ActiveAnnotation变量,以便每次循环都找到注释匹配。

© www.soinside.com 2019 - 2024. All rights reserved.