Hi All,
I am trying to extract VSwitch Secuirty properties using a script,however I am unable to export the result to outputfile.I have tried >| path and other synatx but still results just gets displayed.Can you please assist?
The issue is due to the Write-Host cmdlet, it sends output to the console and doesn't place anything in the pipeline.
That is why a redirect (>) will not capture anything.
See also Write-Host Considered Harmful
Best is to replace the Write-Host with for example Write-Output.
But then you can not use the -NoNewline switch.
But that problem can be tackled, something like this for example
foreach ($VMHost in Get-VMHost){
Write-Output "`n"$VMHost.Name
foreach($vSwitch in $VMHost | Get-VirtualSwitch -Standard){
Write-Output " "$vSwitch.Name
Write-Output "`tPromiscuous mode enabled:" $vSwitch.ExtensionData.Spec.Policy.Security.AllowPromiscuous
Write-Output "`tForged transmits enabled:" $vSwitch.ExtensionData.Spec.Policy.Security.ForgedTransmits
Write-Output "`tMAC Changes enabled:" $vSwitch.ExtensionData.Spec.Policy.Security.MacChanges
foreach($portgroup in ($VMHost.ExtensionData.Config.Network.Portgroup | where {$_.Vswitch -eq $vSwitch.Key})){
Write-Output "`n`t`t"$portgroup.Spec.Name
If ($portgroup.Spec.Policy.Security.AllowPromiscuous -eq $null) {
$txt = $vSwitch.ExtensionData.Spec.Policy.Security.AllowPromiscuous
}
Else {
$txt = $portgroup.Spec.Policy.Security.AllowPromiscuous
}
Write-Output "`t`t`tPromiscuous mode enabled: $($txt)"
If ($portgroup.Spec.Policy.Security.ForgedTransmits -eq $null) {
$txt = $vSwitch.ExtensionData.Spec.Policy.Security.ForgedTransmits
}
Else {
$txt = $portgroup.Spec.Policy.Security.ForgedTransmits
}
Write-Output "`t`t`tForged transmits enabled: $($txt)"
If ($portgroup.Spec.Policy.Security.MacChanges -eq $null) {
$txt = $vSwitch.ExtensionData.Spec.Policy.Security.MacChanges
}
Else {
$txt = $portgroup.Spec.Policy.Security.MacChanges
}
Write-Output "`t`t`tMAC Changes enabled: $($txt)"
}
}
}
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
In which format is the output available in the script ?
Perhaps attach the relevant part of your script.
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Hi LucD,
Thanks for the response.The following is the script that I am trying to use.
foreach ($VMHost in Get-VMHost){
Write-Host "`n"$VMHost.Name
foreach($vSwitch in $VMHost | Get-VirtualSwitch -Standard){
Write-Host " "$vSwitch.Name
Write-Host "`tPromiscuous mode enabled:" $vSwitch.ExtensionData.Spec.Policy.Security.AllowPromiscuous
Write-Host "`tForged transmits enabled:" $vSwitch.ExtensionData.Spec.Policy.Security.ForgedTransmits
Write-Host "`tMAC Changes enabled:" $vSwitch.ExtensionData.Spec.Policy.Security.MacChanges
foreach($portgroup in ($VMHost.ExtensionData.Config.Network.Portgroup | where {$_.Vswitch -eq $vSwitch.Key})){
Write-Host "`n`t`t"$portgroup.Spec.Name
Write-Host "`t`t`tPromiscuous mode enabled: " -nonewline
If ($portgroup.Spec.Policy.Security.AllowPromiscuous -eq $null) { Write-Host $vSwitch.ExtensionData.Spec.Policy.Security.AllowPromiscuous } Else { Write-Host $portgroup.Spec.Policy.Security.AllowPromiscuous }
Write-Host "`t`t`tForged transmits enabled: " -nonewline
If ($portgroup.Spec.Policy.Security.ForgedTransmits -eq $null) { Write-Host $vSwitch.ExtensionData.Spec.Policy.Security.ForgedTransmits } Else { Write-Host $portgroup.Spec.Policy.Security.ForgedTransmits }
Write-Host "`t`t`tMAC Changes enabled: " -nonewline
If ($portgroup.Spec.Policy.Security.MacChanges -eq $null) { Write-Host $vSwitch.ExtensionData.Spec.Policy.Security.MacChanges } Else { Write-Host $portgroup.Spec.Policy.Security.MacChanges }
}
}
The issue is due to the Write-Host cmdlet, it sends output to the console and doesn't place anything in the pipeline.
That is why a redirect (>) will not capture anything.
See also Write-Host Considered Harmful
Best is to replace the Write-Host with for example Write-Output.
But then you can not use the -NoNewline switch.
But that problem can be tackled, something like this for example
foreach ($VMHost in Get-VMHost){
Write-Output "`n"$VMHost.Name
foreach($vSwitch in $VMHost | Get-VirtualSwitch -Standard){
Write-Output " "$vSwitch.Name
Write-Output "`tPromiscuous mode enabled:" $vSwitch.ExtensionData.Spec.Policy.Security.AllowPromiscuous
Write-Output "`tForged transmits enabled:" $vSwitch.ExtensionData.Spec.Policy.Security.ForgedTransmits
Write-Output "`tMAC Changes enabled:" $vSwitch.ExtensionData.Spec.Policy.Security.MacChanges
foreach($portgroup in ($VMHost.ExtensionData.Config.Network.Portgroup | where {$_.Vswitch -eq $vSwitch.Key})){
Write-Output "`n`t`t"$portgroup.Spec.Name
If ($portgroup.Spec.Policy.Security.AllowPromiscuous -eq $null) {
$txt = $vSwitch.ExtensionData.Spec.Policy.Security.AllowPromiscuous
}
Else {
$txt = $portgroup.Spec.Policy.Security.AllowPromiscuous
}
Write-Output "`t`t`tPromiscuous mode enabled: $($txt)"
If ($portgroup.Spec.Policy.Security.ForgedTransmits -eq $null) {
$txt = $vSwitch.ExtensionData.Spec.Policy.Security.ForgedTransmits
}
Else {
$txt = $portgroup.Spec.Policy.Security.ForgedTransmits
}
Write-Output "`t`t`tForged transmits enabled: $($txt)"
If ($portgroup.Spec.Policy.Security.MacChanges -eq $null) {
$txt = $vSwitch.ExtensionData.Spec.Policy.Security.MacChanges
}
Else {
$txt = $portgroup.Spec.Policy.Security.MacChanges
}
Write-Output "`t`t`tMAC Changes enabled: $($txt)"
}
}
}
Blog: lucd.info Twitter: @LucD22 Co-author PowerCLI Reference
Hi LucD,
Thanks for the quick response.Your assistance is much appreciated and it works!!!