2 Replies Latest reply on Jun 30, 2020 12:10 AM by LucD

    Get-VM will not display summary when invoked from powershell script?

    clmiller24x7 Lurker

      I want a simple Windows10 powershell script to start VMs then show the VMs that are powered on.  Like this:

       

      Connect-VIServer -Server esx-101.mylab.net -User root -Password mypassword

      Start-VM ServerVM1

      Start-VM ServerVM2

      Get-VM

      Disconnect-VIServer -Confirm:$false

       

      This works, however the output of the Get-VM command is verbose and detailed. If I don't disconnect from the host in the script and then type the exact same "Get-VM" syntax in the open powershell, then I get a summary of the VMs (one line per VM).  Why would the command give verbose output only when run in a powershell script?  The sound you hear is me banging my head.....

        • 1. Re: Get-VM will not display summary when invoked from powershell script?
          RvdNieuwendijk Virtuoso
          vExpertUser Moderators

          The output you get from a command in a script depends on the output from the previous commands. You can pipe the output from the commands you don't want to see to | Out-Null.

           

          Connect-VIServer -Server esx-101.mylab.net -User root -Password mypassword | Out-Null

          Start-VM ServerVM1 | Out-Null

          Start-VM ServerVM2 | Out-Null

          Get-VM

          Disconnect-VIServer -Confirm:$false | Out-Null

          1 person found this helpful
          • 2. Re: Get-VM will not display summary when invoked from powershell script?
            LucD Guru
            Community WarriorsvExpertUser Moderators

            The reason you are seeing what you are seeing is due to the reason the 'formatter' works in PowerShell.

            There are some rules when the formatter is dealing with multiple, non-primitive objects in the pipeline.


            In this case, the first non-primitive object is the result from your Connect-VIServer, for which there is a type declaration in PowerCLI.

            This results in a Format-Custom type of format, which will lock in all subsequent non-primitive objects in Format-List (and not the Format-Table you get when you just do Get-VM).

             

            Instead of hiding output, you can 'reset' the formatter, by piping each object  to the Out-Default cmdlet.

            This will force the formatter to handle each non-primitive object as if it is the first one.

             

            Connect-VIServer -Server esx-101.mylab.net -User root -Password mypassword | Out-Default

            Start-VM ServerVM1 | Out-Default

            Start-VM ServerVM2 | Out-Default

            Get-VM | Out-Default

            Disconnect-VIServer -Confirm:$false | Out-Default

            Blog: http://lucd.info | Twitter: @LucD22 | PowerCLI Reference co-author: http://tinyurl.com/hkn4glz
            1 person found this helpful