Kelly Garcia
asked on
powershell script
HI Guys,
I know this is something simple, but i cant seem to figure it out! Please review my code below:
get-vm *| % {
$vminfo={} | select name, network
$vminfo.name = $_.name
$vminfo.network = (Get-VM -Name $vm).guest.nics.networknam e
} | export-csv vmnetwork3.csv
thank you in advance!
I know this is something simple, but i cant seem to figure it out! Please review my code below:
get-vm *| % {
$vminfo={} | select name, network
$vminfo.name = $_.name
$vminfo.network = (Get-VM -Name $vm).guest.nics.networknam
} | export-csv vmnetwork3.csv
thank you in advance!
You set the properties for the variable, but you never output it, so nothing is sent to Export-CSV. The following should work.
get-vm *| % {
$vminfo={} | select name, network
$vminfo.name = $_.name
$vminfo.network = (Get-VM -Name $vm).guest.nics.networkname
$vminfo
} | export-csv vmnetwork3.csv
ASKER
problem is sometimes there is more than one network, on (Get-VM -Name $vm).guest.nics.networknam e, and therefore the output is system.object[]
ASKER
footech the script doesn't work, it gives me the same vminfo.net for every vm's
ASKER
i have this script:
(get-vm) | %{
$vm = $_
echo $vm.name
$vm.Guest.Nics | %{
$vminfo = $_
echo $vminfo.NetworkName
}
}
however how do i out this info in a csv file?
(get-vm) | %{
$vm = $_
echo $vm.name
$vm.Guest.Nics | %{
$vminfo = $_
echo $vminfo.NetworkName
}
}
however how do i out this info in a csv file?
ASKER
thats the best way i've found so far, can anyone thing of a better way:
$Report=@()
(get-vm) | %{
$vm=$_
$vminfo={} | select Name, Network
$vminfo.name = $_.name
$vminfo.Guest.Nics | %{
$vminfo.network = (Get-VM -Name $vm).guest.nics.networknam e
$Report += $vminfo
}
}
after the script completes, the do a $report | output-csv vmnetwork.csv
$Report=@()
(get-vm) | %{
$vm=$_
$vminfo={} | select Name, Network
$vminfo.name = $_.name
$vminfo.Guest.Nics | %{
$vminfo.network = (Get-VM -Name $vm).guest.nics.networknam
$Report += $vminfo
}
}
after the script completes, the do a $report | output-csv vmnetwork.csv
ASKER
$Report=@()
(get-vm) | %{
$vm=$_
$vminfo={} | select Name, Network
$vminfo.name = $_.name
$vminfo.Guest.Nics | %{
$vminfo.network = (Get-VM -Name $vm).guest.nics.networknam e
$Report += $vminfo
}
} | export-csv vmguest.csv
^ can i do something like this?
(get-vm) | %{
$vm=$_
$vminfo={} | select Name, Network
$vminfo.name = $_.name
$vminfo.Guest.Nics | %{
$vminfo.network = (Get-VM -Name $vm).guest.nics.networknam
$Report += $vminfo
}
} | export-csv vmguest.csv
^ can i do something like this?
ASKER
when i export-csv ,
for ones win more than one network card i get System.Object[]
System.Object[]
System.Object[]
System.Object[]
System.Object[]
on excel.
however i can see the out fine on the powershell window, please help. this is in relation to this code:
$Report=@()
(get-vm) | %{
$vm=$_
$vminfo={} | select Name, Network
$vminfo.name = $_.name
$vminfo.Guest.Nics | %{
$vminfo.network = (Get-VM -Name $vm).guest.nics.networknam e
$Report += $vminfo
}
}
$Report | export-csv vmguestnetwork.csv
for ones win more than one network card i get System.Object[]
System.Object[]
System.Object[]
System.Object[]
System.Object[]
on excel.
however i can see the out fine on the powershell window, please help. this is in relation to this code:
$Report=@()
(get-vm) | %{
$vm=$_
$vminfo={} | select Name, Network
$vminfo.name = $_.name
$vminfo.Guest.Nics | %{
$vminfo.network = (Get-VM -Name $vm).guest.nics.networknam
$Report += $vminfo
}
}
$Report | export-csv vmguestnetwork.csv
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
That should work, but does too much. You do not need to run Get-VM twice, you already have the VM object at hand. And we should create the output object at once:
get-vm | % {
New-Object PsObject -Property @{
name = $_.Name
network = $_.guest.Nics.Networkname -join ';'
}
} | Export-Csv vmnetwork3.csv
Of course the separator for the NICs is arbitrary, and semicolon just one typical choice besides comma and pipe.
Qlemo's correct. No need to run the same command twice when you already have the info. He took the initiative to clean up the code, and as such I would've split the points with him.
get-vm * | foreach {
$name = $_.name
$vmnetwork = (get-vm $name).guest.nics.networkn
"$name, $vmnetwork" >> C:\network.txt
}