VMware Cloud Community
ramtamilan
Contributor
Contributor
Jump to solution

getting result to a outputfile

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?

1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

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

View solution in original post

4 Replies
LucD
Leadership
Leadership
Jump to solution

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

0 Kudos
ramtamilan
Contributor
Contributor
Jump to solution

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 }

}

}

0 Kudos
LucD
Leadership
Leadership
Jump to solution

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

ramtamilan
Contributor
Contributor
Jump to solution

Hi LucD,

Thanks for the quick response.Your assistance is much appreciated and it works!!!

0 Kudos