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
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
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?
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
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)
}
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
Thanks for your response,
I have 3 adapter and all three adapter has its own IP,
And did you change that line I included?
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
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)
}
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)
}
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
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
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
Subnet | Name |
255.255.255.0 | HP NC365T PCIe Quad Port Gigabit Server Adapter |
255.255.255.0 | HP 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.0 | Production |
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
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