A lot of the script that I have been writing rely on new cmdlets or properties in the current release of PowerCLI. Telling people to upgrade before running the scripts has not been enough so I am going to do the smart thing and check that the appropriate version is running.
Here is the code to that I am using to do the validation.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| # By default this will check that the running version of PowerCLI is greater
# than or equal to the specified version and throw an exception if not.
# For an exact match specify the -exact parameter.
function Require-PowerCliVersion
{
param
(
[Int32]$build = $(throw "Require-PowerCliVersion: No build number specified."),
[switch]$exact # If true requires the exact build number to match.
)
$passed = $false
if (Get-Command Get-PowerCliVersion -ErrorAction SilentlyContinue)
{
$cliBuild = (Get-PowerCliVersion).Build
if ($exact)
{
if ($build -eq $cliBuild)
{
$passed = $true
}
}
elseif ($cliBuild -ge $build)
{
$passed = $true
}
}
if (!$passed)
{
throw "Require-PowerCliVersion: Minimum PowerCLI version requirement not met."
}
} |
Here is a short convenience script that will simulate a persistent login to a VMware host system when using the vCLI on Windows. Typically you have to specify a lot of parameters that include login information or a session file. With this method you just run the script and provide the hostname, username, and password for the connection.
After running this script you can run commands like “vicfg-mpath.pl –list” without additional parameters.
There is much that could be done to improve this script; this is just a quick and dirty version to make my life easier. If I improve it in the future I will post updates.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| #!/usr/bin/perl -w
use strict;
use warnings;
my $vcli_install_dir = "C:\\Program Files\\VMware\\VMware vSphere CLI\\bin";
chdir($vcli_install_dir) or die "Could not change to the vCLI directory: $vcli_install_dir";
print "Hostname:";
my $host_name = <STDIN>;
chomp($host_name);
$ENV{'VI_SERVER'} = $host_name;
my $session_file_name = $ENV{'TEMP'} . "\\vcli.session";
$ENV{'VI_SAVESESSIONFILE'} = $session_file_name;
system("..\\Perl\\apps\\session\\save_session.pl");
$ENV{'VI_SESSIONFILE'} = $session_file_name;
print "Spawning a logged in subshell. Type exit to end the session.\n";
system("cmd.exe");
# Remove the session file.
unlink($session_file_name); |