VMware Cloud Community
dhanu2k7
Enthusiast
Enthusiast

IP address network details Array to CSV

Hello

First off sorry for question about powershell, I have small issue , where I  script to gather inventory but i am finding difficult to output to the CSV for IP address and other network details, if you can see below script $row shows full information but when i export to the it shows only one IP address where as server has multiple Ip address for multiple adaper

Kindly respond if you have any solution for this

$Hardware =@()

   ForEach-Object {

$i=$env:computername

$MB= Get-WmiObject Win32_BaseBoard    |  Select Name,Manufacturer,Product,SerialNumber,Status

$OS=get-WmiObject Win32_OperatingSystem   | select-object CSName,OSArchitecture,@{Name="FreePhysicalMemory";Expression={ "{0:N0}" -f ($_.FreePhysicalMemory / 1MB)}},caption,@{Name="TotalVirtualMemorySize";Expression={ "{0:N0}" -f ($_.TotalVirtualMemorySize / 1MB)}},ServicePackMajorVersion

$BI =Get-WmiObject win32_bios   | Select Manufacturer,Name,BIOSVersion,PrimaryBIOS,SMBIOSBIOSVersion,SMBIOSMajorVersion,SMBIOSMinorVersion

$SY= Get-WmiObject Win32_ComputerSystemProduct   | Select Vendor,Version,Name,IdentifyingNumber,UUID

$HD= Get-WmiObject win32_diskDrive   | select Model,SerialNumber,InterfaceType,@{Name="Size";Expression={ "{0:N0}" -f ($_.FileSize / 1MB)}},Partitions

$NIC=Get-WmiObject win32_networkadapter  | Select Name,Manufacturer,Description ,AdapterType,Speed,MACAddress,NetConnectionID,IPaddress

$Mem=Get-WmiObject Win32_PhysicalMemory    | select BankLabel,DeviceLocator,Capacity,Manufacturer,PartNumber,SerialNumber,Speed

$PROC=Get-WmiObject Win32_Processor   | Select Caption,DeviceID,NumberOfCores,NumberOfLogicalProcessors

$CS=Get-WmiObject Win32_ComputerSystem   | select-object Name,@{Name="TotalPhysicalMemory";Expression={ "{0:N0}" -f ($_.TotalPhysicalMemory / 1MB)}},SystemType,Domain,DNSHostName

$PF=Get-WmiObject -Class Win32_pagefileusage   | select-object Caption,@{Name="AllocatedBaseSize";Expression={ "{0:N0}" -f ($_.AllocatedBaseSize / 1MB)}}

$NW=Get-WmiObject -class "Win32_NetworkAdapterConfiguration"    | Where {$_.IPEnabled -Match "True"} | Select-object IPaddress,IPSubnet,DefaultIPgateway,DNSServerSearchOrder,Description,DNSDomainSuffixSearchOrder

$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $i)

$regKey= $reg.OpenSubKey("SYSTEM\\CurrentControlSet\\Services\\Netlogon\\Parameters",$true)

$regvalue=$regkey.GetValue('DynamicSiteName')

$Report = "" | Select-Object ComputerName,OSName,ServicePack,TotalPhysicalMemory,TotalVirtualMemory,SystemType,Domain,DNSHostName,BIManufacturer,BISerialNumber,BIOSVersion,SMBIOSBIOSVersion,SVersion,ModuleName,MBSerialNumber,UUID,Descriptions,MACAddres,NWIPaddress,NWIPSubnet,NWDefaultIPgateway,NWDNSServerSearchorder,NWDescription,NWDNSDomainSuffixSearchorder,PCaption,PDeviceID,NumberOfCores,NumberOfLogicalProcessors,sitename

$Report.ComputerName = $OS.CSNAME

$Report.OSName= $OS.caption

$Report.ServicePack= $OS.ServicePackMajorVersion

$Report.TotalPhysicalMemory = $CS.TotalPhysicalMemory

$Report.TotalVirtualMemory =$OS.TotalVirtualMemorySize

$Report.SystemType =$CS.SystemType

$Report.Domain=$CS.Domain

$Report.DNSHostname=$CS.DNSHostName

$Report.BIManufacturer = $BI.Manufacturer

$Report.BISerialNumber= $BI.MSerialNumber

$Report.BIOSVersion= [string]::Join(',',$BI.BIOSVersion)

$Report.SMBIOSBIOSVersion= $BI.SMBIOSBIOSVersion

$Report.SVersion= $SY.Version

$Report.ModuleName= $SY.Name

$Report.MBSerialNumber= $SY.IdentifyingNumber

$Report.UUID= $SY.UUID

$Netinfo = @()

ForEach ($Adapter in (Get-WmiObject Win32_NetworkAdapter -Filter "NetEnabled='True'"))

{  $Config = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "Index = '$($Adapter.Index)'"

      $row = New-Object System.Object

       $row | Add-Member -MemberType NoteProperty -Name "Name" -Value $Adapter.Name

       $row | Add-Member -MemberType NoteProperty -Name "IP" -Value $Config.IPAddress

       $row | Add-Member -MemberType NoteProperty -Name "MAC" -Value  $Config.MacAddress

       $row | Add-Member -MemberType NoteProperty -Name "Subnet" -Value $Config.IPSubnet[0]

       $row | Add-Member -MemberType NoteProperty -Name "DG" -Value $Config.DefaultIPGateway

       $row | Add-Member -MemberType NoteProperty -Name "DNSS" -Value $Config.DNSServerSearchOrder

       $row | Add-Member -MemberType NoteProperty -Name "DNSuf" -Value $Config.DNSDomainSuffixSearchorder

$row

$Report.MACAddres = [string]::Join(',',$row.MAC)

$Report.Descriptions =[string]::Join(',',$row.Name)

$Report.NWIPaddress =[string]::Join(',',$row.IP)

$Report.NWIPSubnet =[string]::Join(',',$row.Subnet)

$Report.NWDefaultIPgateway = [string]::Join(',',$row.DG)

$Report.NWDNSServerSearchorder = [string]::Join(',',$row.DNSS)

$Report.NWDNSDomainSuffixSearchorder= [string]::Join(',',$row.DNSuf)

}

$Report.PCaption= [string]::Join(',',$PROC.Caption)

$Report.PDeviceID= $PROC.DeviceID

$Report.NumberOfCores= [string]::Join(',',$PROC.NumberOfCores)

$Report.NumberOfLogicalProcessors= [string]::Join(',',$PROC.NumberOfLogicalProcessors)

$Report.Sitename =$regvalue

  $Hardware += $Report

}

$Hardware | export-csv "c:\windows\temp\script\$i.csv" -NoTypeInformation

one of error message

Exception calling "Join" with "2" argument(s): "Value cannot be null.

Parameter name: value"

At line:48 char:36

+ $Report.NWIPaddress =[string]::Join <<<< (',',$row.IP)

    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException

    + FullyQualifiedErrorId : DotNetMethodException

Message was edited by: dhanu2k7

Tags (1)
Reply
0 Kudos
14 Replies
LucD
Leadership
Leadership

You have the ForEach-Object at the beginning, but what do you feed into that cmdlet?

Are there lines missing?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
dhanu2k7
Enthusiast
Enthusiast

I need put all IP address/DNS search order etc..  for all adapter into the main CSV file, at the moment i can only one ip address but not getting all Ip address, when i do $row it shows all Ip address for all adapter output but when i export csv its shows one Ip address

Do you want me to remove ForEach-Object?

Reply
0 Kudos
LucD
Leadership
Leadership

No not needed.

The IPAddress property is an array.

You can convert that array to a string like this

$row | Add-Member -MemberType NoteProperty -Name "IP" -Value ($Config.IPAddress -join '|')


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
dhanu2k7
Enthusiast
Enthusiast

Thanks Luc

When I put below script $Config.IPAddress -join ',' , i cannot see exception -join class error but i am still not getting all the Ip address in excel

when i do $row.ip

I get three IP

xxx.xx.xx.xx

xxx.xx.x.xxx.

xx.x.x.x

but when i export -csv iget last row ip address not above two ip adress? that mean i should get in excel like below

xx.x.x.x , x.x.x.x.xx, xx.x.x.x@

$Netinfo = @()

ForEach ($Adapter in (Get-WmiObject Win32_NetworkAdapter -Filter "NetEnabled='True'"))

{  $Config = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "Index = '$($Adapter.Index)'"

     $row = New-Object System.Object

      $row | Add-Member -MemberType NoteProperty -Name "Name" -Value $Adapter.Name

      $row | Add-Member -MemberType NoteProperty -Name "IP" -Value ($Config.IPAddress -join ',')

      $row | Add-Member -MemberType NoteProperty -Name "MAC" -Value  $Config.MacAddress

      $row | Add-Member -MemberType NoteProperty -Name "Subnet" -Value $Config.IPSubnet[0]

      $row | Add-Member -MemberType NoteProperty -Name "DG" -Value $Config.DefaultIPGateway

      $row | Add-Member -MemberType NoteProperty -Name "DNSS" -Value $Config.DNSServerSearchOrder

      $row | Add-Member -MemberType NoteProperty -Name "DNSuf" -Value $Config.DNSDomainSuffixSearchorder

$row.IP

$Report.MACAddres = [string]::Join(',',$row.MAC)

$Report.Descriptions =[string]::Join(',',$row.Name)

$Report.NWIPaddress =$row.IP

$Report.NWIPSubnet =[string]::Join(',',$row.Subnet)

$Report.NWDefaultIPgateway = [string]::Join(',',$row.DG)

$Report.NWDNSServerSearchorder = [string]::Join(',',$row.DNSS)

$Report.NWDNSDomainSuffixSearchorder= [string]::Join(',',$row.DNSuf)

}

Reply
0 Kudos
LucD
Leadership
Leadership

You are looping over the adapters on the station.

Do you have multiple IP addresses per adapter, or 1 IP address on each adapter.

In that last case, you would also need to change this line

    $Report.NWIPaddress = $row.IP -join('|')


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
dhanu2k7
Enthusiast
Enthusiast

Thanks for your response,

I have 3 adapter and all three adapter has its own IP,

Reply
0 Kudos
LucD
Leadership
Leadership

And did you change that line I included?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
dhanu2k7
Enthusiast
Enthusiast

it same issue, in screen all 3 IP visible but when i go and see csv, its only one IP address

$Netinfo = @()

ForEach ($Adapter in (Get-WmiObject Win32_NetworkAdapter -Filter "NetEnabled='True'"))

{  $Config = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "Index = '$($Adapter.Index)'"

     $row = New-Object System.Object

      $row | Add-Member -MemberType NoteProperty -Name "Name" -Value ($Adapter.Name -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "IP" -Value ($Config.IPAddress -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "MAC" -Value  ($Config.MacAddress  -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "Subnet" -Value ($Config.IPSubnet  -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "DG" -Value ($Config.DefaultIPGateway  -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "DNSS" -Value ($Config.DNSServerSearchOrder  -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "DNSuf" -Value ($Config.DNSDomainSuffixSearchorder  -join '|')

$d=$row.IP -join '|'

$d

$Report.MACAddres = [string]::Join(',',$row.MAC)

$Report.Descriptions =[string]::Join(',',$row.Name)

$Report.NWIPaddress =$row.IP -join '|'

$Report.NWIPSubnet =[string]::Join(',',$row.Subnet)

$Report.NWDefaultIPgateway = [string]::Join(',',$row.DG)

$Report.NWDNSServerSearchorder = [string]::Join(',',$row.DNSS)

$Report.NWDNSDomainSuffixSearchorder= [string]::Join(',',$row.DNSuf)

}

Reply
0 Kudos
dhanu2k7
Enthusiast
Enthusiast

Thanks for your response,

yes I have used, please find my script content

{  $Config = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "Index = '$($Adapter.Index)'"

     $row = New-Object System.Object

      $row | Add-Member -MemberType NoteProperty -Name "Name" -Value ($Adapter.Name -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "IP" -Value ($Config.IPAddress -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "MAC" -Value  ($Config.MacAddress  -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "Subnet" -Value ($Config.IPSubnet  -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "DG" -Value ($Config.DefaultIPGateway  -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "DNSS" -Value ($Config.DNSServerSearchOrder  -join '|')

      $row | Add-Member -MemberType NoteProperty -Name "DNSuf" -Value ($Config.DNSDomainSuffixSearchorder  -join '|')

$d=$row.IP -join '|'

$d

$Report.MACAddres = [string]::Join(',',$row.MAC)

$Report.Descriptions =[string]::Join(',',$row.Name)

$Report.NWIPaddress =$row.IP -join '|'

$Report.NWIPSubnet =[string]::Join(',',$row.Subnet)

$Report.NWDefaultIPgateway = [string]::Join(',',$row.DG)

$Report.NWDNSServerSearchorder = [string]::Join(',',$row.DNSS)

$Report.NWDNSDomainSuffixSearchorder= [string]::Join(',',$row.DNSuf)

}

Reply
0 Kudos
LucD
Leadership
Leadership

What does this produce?

ForEach ($Adapter in (Get-WmiObject Win32_NetworkAdapter -Filter "NetEnabled='True'")){

    Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "Index = '$($Adapter.Index)'"

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
LucD
Leadership
Leadership

Can you try with this version?

$report = ForEach ($Adapter in (Get-WmiObject Win32_NetworkAdapter -Filter "NetEnabled='True'")){

    $config = Get-WmiObject Win32_NetworkAdapterConfiguration -Filter "Index = '$($Adapter.Index)'"

    New-Object PSObject -Property @{

        Name = $Adapter.Name

        IP = $config.IPAddress -join '|'

        MAC = $Adapter.MACAddress

        Subnet = $config.IPSubnet -join '|'

        DG = $config.DefaultIPGateway -join '|'

        DNSS = $config.DnsServerSearchOrder -join '|'

        DNSuf = $config.DNSDomainSuffixSearchorder -join '|'

    }

}

$report | Export-Csv -Path .\report.csv -NoTypeInformation -UseCulture


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
dhanu2k7
Enthusiast
Enthusiast

thanks for your response, it shows all the report totally 6 rows but i am wondering why we cannot join row to comma delimeter like

servername ... subnet                       Name

xxxx.               x.x.x.x, x.x.x.x,x.x.x.x  

   

SubnetName
255.255.255.0HP NC365T PCIe Quad Port Gigabit Server Adapter
255.255.255.0HP NC365T PCIe Quad Port Gigabit Server Adapter #2
HP Ethernet 1Gb 4-port 331i Adapter
HP Ethernet 1Gb 4-port 331i Adapter
HP Network Teaming Virtual Miniport Driver
255.255.248.0Production
Reply
0 Kudos
LucD
Leadership
Leadership

To be honest I didn't quite understand you original script.

What is missing in that last piece of code I provided?

Do you need extra columns in the CSV? What info should be in those columns?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

Reply
0 Kudos
dhanu2k7
Enthusiast
Enthusiast

sorry to make you confusion Lucd, In my orgional script, i am extracting all the inventory information along with I also extracting IP address/mask/gw/DNS etc but when I do export command in my orgional script i get all info however for Ip address it showing only one Ip address when  server has multiple adapters ( all adapter configured IP ). So The script works well in server which has only one adapter but script not getting all IP address when it has multiple adapter, i am exepecting entire csv report like below format

name     Ip                          DNS

server1   x.x.x.x, x.x.x.x,  x.x.x.x,x.x.x.x,

server2    x.x.x.x, x.x.x.x,  x.x.x.x,x.x.x.x,

last code which you given its producing correct csv file but it creats each row for each adapter, but i need in one row all adapter IP should be reflect using , delimeter, hope this clears? meanwhile I asked one question in other page ( same network details for all VMs) , if you could help that also its really greatful. I have 7k servers which is difficult to handle it so need your help

Reply
0 Kudos