105 lines
3.4 KiB
PowerShell
105 lines
3.4 KiB
PowerShell
param (
|
|
[string]$vcenter = "",
|
|
# [switch]$allvms,
|
|
[switch]$savecred,
|
|
[switch]$Help = $false
|
|
)
|
|
|
|
# Variables
|
|
$fileVersion = "1.2.0"
|
|
$fileDate = "2024-12-13"
|
|
|
|
# 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."
|
|
} |