We have been consolidating IT groups at the university for several years now. During this time we have to convert both clients and servers to use our central division Active Directory and other centralized services. However gathering all of the networking information can be quite the task and prone to error. One of the easiest ways I have found to gather all of this information is by running a script to generate CSV file of these settings.
I used this existing script I found over on techibee.com and took it a few steps further.
I added that ability to query Active Directory and find all the computers within an OU and the ability to adjust the filter. This can be handy if you want to find just windows servers or windows clients or just plain windows. I also fixed the output for multiple DNS servers or gateways to a CSV file as well as added some standard header and footers to make the screen output a bit cleaner. This script does require you to have the Active Directory Powershell Module Installed. It will save the CSV to the local directory from which the script is executed and report the path at the end of the screen output. This script should be run with a highly privileged user as it will need to query multiple remote computer using WMI and access Active Directory.
Script
Import-Module ActiveDirectory $localpath = Get-Location; $CSVFileName = $localpath.Path + "\Department-Network-Information.csv"; $ComputerName = Get-ADComputer -SearchBase "OU=Department,OU=Division,DC=domain,DC=local" -Filter {OperatingSystem -Like "Windows*"} -Property "Name"; $Results = @() foreach ($Computer in $ComputerName) { if(Test-Connection -ComputerName $Computer.Name -Count 1 -ea 0) { $Networks = Get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $Computer.Name | ? {$_.IPEnabled}; foreach ($Network in $Networks) { $IPAddress = $Network.IpAddress[0]; $SubnetMask = $Network.IPSubnet[0]; $DefaultGateway = $Network.DefaultIPGateway; $DNSServers = $Network.DNSServerSearchOrder; $IsDHCPEnabled = $false; If($network.DHCPEnabled) { $IsDHCPEnabled = $true; } $MACAddress = $Network.MACAddress; if ($DNSServers) { $StringDNSServers = [string]::join("; ",$DNSServers); } else { $StringDNSServers = " "; } if($DefaultGateway) { $StringDefaultGateway = [string]::join("; ",$DefaultGateway); } else { $StringDefaultGateway = " "; } $ReturnedObj = New-Object -Type PSObject; $ReturnedObj | Add-Member -MemberType NoteProperty -Name ComputerName -Value $Computer.Name.ToUpper(); $ReturnedObj | Add-Member -MemberType NoteProperty -Name IPAddress -Value $IPAddress; $ReturnedObj | Add-Member -MemberType NoteProperty -Name SubnetMask -Value $SubnetMask; $ReturnedObj | Add-Member -MemberType NoteProperty -Name Gateway -Value $StringDefaultGateway; $ReturnedObj | Add-Member -MemberType NoteProperty -Name IsDHCPEnabled -Value $IsDHCPEnabled; $ReturnedObj | Add-Member -MemberType NoteProperty -Name DNSServers -Value $StringDNSServers; $ReturnedObj | Add-Member -MemberType NoteProperty -Name MACAddress -Value $MACAddress; $ReturnedObj; $Results += $ReturnedObj; } } } $Results | export-csv $CSVFileName -notype; Write-Host Write-Host "File Saved to: $CSVFileName"; Write-Host Write-Host "Press any key to close ..." $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
Screen Output Example
ComputerName : Computer1 IPAddress : 194.90.128.89 SubnetMask : 255.255.255.0 Gateway : 194.90.128.254 IsDHCPEnabled : True DNSServers : 8.8.8.8; 8.8.4.4 MACAddress : 18:13:73:2A:98:FA ComputerName : Computer2 IPAddress : 194.90.128.92 SubnetMask : 255.255.255.0 Gateway : 194.90.128.254 IsDHCPEnabled : True DNSServers : 8.8.8.8; 8.8.4.4 MACAddress : F8:B1:56:AC:FB:2E File Saved to: D:\Powershell-Scripts\Department-Network-Information.csv Press any key to close ...
CSV Output
"Computer1","194.90.128.89","255.255.255.0","194.90.128.254","True","8.8.8.8; 8.8.4.4","18:13:73:2A:98:FA" "Computer2","194.90.128.92","255.255.255.0","194.90.128.254","True","8.8.8.8; 8.8.4.4","F8:B1:56:AC:FB:2E"