title:Logging in to Multiple vCenter Servers at Once with PowerCLI
tags:["all", "vmware", "powercli"]

Technology keeps moving but this post has not.

What you're about to read hasn't been updated in more than a year. The information may be out of date. Let me know if you see anything that needs fixing.

I manage a large VMware environment spanning several individual vCenters, and I often need to run PowerCLI queries across the entire environment. I waste valuable seconds running Connect-ViServer and logging in for each and every vCenter I need to talk to. Wouldn't it be great if I could just log into all of them at once?

I can, and here's how I do it.

Logging in to multiple vCenters

The Script

The following Powershell script will let you define a list of vCenters to be accessed, securely store your credentials for each vCenter, log in to every vCenter with a single command, and also close the connections when they're no longer needed. It's also a great starting point for any other custom functions you'd like to incorporate into your PowerCLI sessions.

1# PowerCLI_Custom_Functions.ps1
2# Usage:
3# 0) Edit $vCenterList to reference the vCenters in your environment.
4# 1) Call 'Update-Credentials' to create/update a ViCredentialStoreItem to securely store your username and password.
5# 2) Call 'Connect-vCenters' to open simultaneously connections to all the vCenters in your environment.
6# 3) Do PowerCLI things.
7# 4) Call 'Disconnect-vCenters' to cleanly close all ViServer connections because housekeeping.
8Import-Module VMware.PowerCLI
10$vCenterList = @("vcenter1", "vcenter2", "vcenter3", "vcenter4", "vcenter5")
12function Update-Credentials {
13 $newCredential = Get-Credential
14 ForEach ($vCenter in $vCenterList) {
15 New-ViCredentialStoreItem -Host $vCenter -User $newCredential.UserName -Password $newCredential.GetNetworkCredential().password
16 }
19function Connect-vCenters {
20 ForEach ($vCenter in $vCenterList) {
21 Connect-ViServer -Server $vCenter
22 }
25function Disconnect-vCenters {
26 Disconnect-ViServer -Server * -Force -Confirm:$false

The Setup

Edit whatever shortcut you use for launching PowerCLI (I use a tab in Windows Terminal - I'll do another post on that setup later) to reference the custom init script. Here's the commandline I use:

powershell.exe -NoExit -Command ". C:\Scripts\PowerCLI_Custom_Functions.ps1"

The Usage

Now just use that shortcut to open up PowerCLI when you wish to do things. The custom functions will be loaded and waiting for you.

  1. Start by running Update-Credentials. It will prompt you for the username+password needed to log into each vCenter listed in $vCenterList. These can be the same or different accounts, but you will need to enter the credentials for each vCenter since they get stored in a separate ViCredentialStoreItem. You'll also run this function again if you need to change the password(s) in the future.
  2. Log in to all the things by running Connect-vCenters.
  3. Do your work.
  4. When you're finished, be sure to call Disconnect-vCenters so you don't leave sessions open in the background.

Celebrate this post: