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.
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
9
10$vCenterList = @("vcenter1", "vcenter2", "vcenter3", "vcenter4", "vcenter5")
11
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 }
17}
18
19function Connect-vCenters {
20 ForEach ($vCenter in $vCenterList) {
21 Connect-ViServer -Server $vCenter
22 }
23}
24
25function Disconnect-vCenters {
26 Disconnect-ViServer -Server * -Force -Confirm:$false
27}
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:
1powershell.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.
- 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 separateViCredentialStoreItem
. You'll also run this function again if you need to change the password(s) in the future. - Log in to all the things by running
Connect-vCenters
. - Do your work.
- When you're finished, be sure to call
Disconnect-vCenters
so you don't leave sessions open in the background.