param ( [string]$vcenter = "", # [switch]$allvms, [switch]$savecred, [switch]$Help = $false ) # Variables $fileVersion = "1.2.1" $fileDate = "2026-07-29" # Display Script Banner Write-Host "--------------------------------------------------" -ForegroundColor White Write-Host "vSphere VM Network Assignment Export" -ForegroundColor Green Write-Host "Version $($FileVersion) ($($FileDate))" -ForegroundColor Green Write-Host "Written by Charlie Silverman" -ForegroundColor Green Write-Host "--------------------------------------------------" -ForegroundColor White if ($Help) { Write-Host "Command Syntax:" -ForegroundColor Green Write-Host 'GetVMNetworks.ps1 -vcenter="VCURI" [-help] [-savecred]' -ForegroundColor Green Write-Host "" Write-Host "Command line options:" -ForegroundColor Green Write-Host "---------------------" -ForegroundColor Green Write-Host "-vcenter - Specify the URI for the vCenter server" -ForegroundColor Green Write-Host "-savecred - Save Credentials. If credentials were previously saved and this option is not selected," -ForegroundColor Green Write-Host " they will be used." -ForegroundColor Green Write-Host "-help - Show this help information." -ForegroundColor Green exit } if ($vcenter -eq "") { $vcenter = Read-Host "Enter name of vCenter Server" } try { if (Test-Path -Path "$env:USERPROFILE\GetVMNetworks-$vcenter.cred" -PathType Leaf) { Write-Host "Using stored credentials for $vcenter." $cred = Import-CliXML -path "$env:USERPROFILE\GetVMNetworks-$vcenter.cred" } else { $cred = Get-Credential -Message "Enter credentials for vCenter $vcenter" } $vcenterConnection = connect-viserver $vcenter -credential $cred -ErrorAction Stop } catch { Write-Host "ERROR: Invalid credentials or incorrect vCenter FQDN" Write-Host $_ exit } if ($savecred) { Write-Host "Storing credentials for $vcenter." $cred | Export-CliXML -Path "$env:USERPROFILE\GetVMNetworks-$vcenter.cred" } # Output filename $DesktopPath = [Environment]::GetFolderPath("Desktop") $now = (Get-Date).ToString("yyyyMMdd_hhmm") $csvFileName = "$DesktopPath\VMNetworkList-$now.csv" # Find the maximum number of adapters in a VM to create the CSV header properly $allvms = get-vm $maxnics = 0 foreach ($vm in $allvms) { $adaptercount = ($vm | get-networkadapter | measure).Count if ($adaptercount -gt $maxnics) { $maxnics = $adaptercount } } # Write the CSV header $header = """Cluster"",""VM Name""" for ($x = 1; $x -le $maxnics; ++$x) { #write-host -NoNewLine ",Network Adapter $x" $header = "$header,""Network Adapter $x""" } # write-host $header | Out-File -FilePath $csvFileName -Encoding UTF8 # Get list of clusters $clusters = get-cluster # Iterate through cluster list foreach ($cluster in $clusters) { # Get list of VMs in the cluster $vms = $cluster | get-vm | sort-object -Property Name $clusterName = $cluster.Name # Iterate through the VM list foreach($vm in $vms) { $vmName = $vm.Name $entry = """$cluster"",""$vmName""" # Get all network adapters for the VM $netAdapters = $vm | get-networkadapter # Iterate through adapter list foreach ($adapter in $netAdapters) { # Append port group name for each adapter $adapterName = $adapter.Name $adapterPG = $adapter.NetworkName $entry = "$entry,""$adapterPG""" } # Write host entry #write-Host $entry $entry | Out-File -FilePath $csvFileName -Append -Encoding UTF8 } Write-Host "`nData for cluster $clusterName has been saved to the file $csvFileName." } Write-Host "Closing connection to $vcenter... " try { $abyss = Disconnect-ViServer $vcenter -confirm:$false Write-Host "Success" -ForegroundColor Green } catch { Write-Error "Failure" }