2 Replies Latest reply on Jul 29, 2016 7:53 AM by jessem

    Script to add VMs to Inventory not working

    jessem Enthusiast

      After I run this script, it gives me an error

       

      At C:\Add-VMXToInventory.ps1:68 char:1

      + {

      + ~

      Missing closing '}' in statement block.

          + CategoryInfo          : ParserError: (:) [], ParseException

          + FullyQualifiedErrorId : MissingEndCurlyBrace

       

      even though I thought the statement is closing with a '}'.  Can anyone help?

      -----------------------------------------

      #

      # Traverses all folders of a data store and adds all VMX files to the inventory

      #

      # Example:

      #

      # .\Add-VMXToInventory.ps1 -DatastoreName My_Datastore -VMFolder VDI -vCenter vcentername -ESXHost host.domain.com

      #

       

      param

      (

         [Parameter(Mandatory=$true)] [string] $DatastoreName, # Case sensitive

         [Parameter(Mandatory=$true)] [string] $VMFolder,

         [Parameter(Mandatory=$true)] [string] $vCenter,

         [Parameter(Mandatory=$true)] [string] $ESXHost

      )

       

      #

      # General options

      #

      #Requires -Version 2

       

      Set-StrictMode -Version 2

       

      #

      # Functions

      #

      # Loads snapins

      function LoadSnapins([string[]] $snapins)

      {

         $loaded = Get-PSSnapin -Name $snapins -ErrorAction SilentlyContinue | % {$_.Name}

         $registered = Get-pssnapin -Name $snapins -Registered -ErrorAction SilentlyContinue  | % {$_.Name}

         $notLoaded = $registered | ? {$loaded -notcontains $_}

       

         if ($notLoaded -ne $null)

         {

            foreach ($newlyLoaded in $notLoaded)

         {

               Add-PSSnapin $newlyLoaded

            }

         }

      }

       

       

      #

      # Start of script

      #

      # Load snapins

      LoadSnapins @("VMware.VimAutomation.Core")

       

      # Avoid stupid questions

      Set-PowerCLIConfiguration -DefaultVIServerMode multiple -Confirm:$false

       

      # Connect to vCenter

      Connect-VIServer $vCenter

       

      # Set up search for .VMX files in datastore

      $ds = Get-Datastore -Name $DatastoreName | %{Get-View $_.Id}

      $SearchSpec = New-Object VMware.Vim.HostDatastoreBrowserSearchSpec

      $SearchSpec.matchpattern = "*.vmx"

      $dsBrowser = Get-View $ds.browser

      $DatastorePath = "[" + $ds.Summary.Name + "]"

       

      # Find all .VMX file paths in datastore, filtering out ones with .snapshot (useful for NetApp NFS)

      $SearchResult = $dsBrowser.SearchDatastoreSubFolders($DatastorePath, $SearchSpec) | where {$_.FolderPath -notmatch ".snapshot"} | %{$_.FolderPath + ($_.File | select Path).Path}

       

      #Register all .vmx files as VMs on the datastore

      foreach($VMXFile in $SearchResult)

      {

         New-VM -VMFilePath $VMXFile -VMHost $ESXHost -Location $VMFolder -RunAsync

      }