<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>http://vwiki.co.uk/index.php?action=history&amp;feed=atom&amp;title=Lab_Manager_Configuration_IP_List</id>
	<title>Lab Manager Configuration IP List - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://vwiki.co.uk/index.php?action=history&amp;feed=atom&amp;title=Lab_Manager_Configuration_IP_List"/>
	<link rel="alternate" type="text/html" href="http://vwiki.co.uk/index.php?title=Lab_Manager_Configuration_IP_List&amp;action=history"/>
	<updated>2026-05-20T08:30:29Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://vwiki.co.uk/index.php?title=Lab_Manager_Configuration_IP_List&amp;diff=1506&amp;oldid=prev</id>
		<title>Sstrutt: Formating</title>
		<link rel="alternate" type="text/html" href="http://vwiki.co.uk/index.php?title=Lab_Manager_Configuration_IP_List&amp;diff=1506&amp;oldid=prev"/>
		<updated>2011-10-27T19:55:55Z</updated>

		<summary type="html">&lt;p&gt;Formating&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-GB&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 19:55, 27 October 2011&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l30&quot;&gt;Line 30:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 30:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$UserFile = &amp;quot;User.fil&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$UserFile = &amp;quot;User.fil&amp;quot;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$PassFile = &amp;quot;Pass.fil&amp;quot;                           # Encrypted file to store password in&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$PassFile = &amp;quot;Pass.fil&amp;quot;                           # Encrypted file to store password in&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$LabMgrSvr = &quot;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ukb&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;sr-lbmgr-10&lt;/del&gt;&quot;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$LabMgrSvr = &quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;labmgr&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;svr&lt;/ins&gt;&quot; &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                       # Lab Manager server hostname&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$ScriptName = ($MyInvocation.MyCommand.Name).Replace(&amp;quot;.ps1&amp;quot;, &amp;quot;&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;$ScriptName = ($MyInvocation.MyCommand.Name).Replace(&amp;quot;.ps1&amp;quot;, &amp;quot;&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Sstrutt</name></author>
	</entry>
	<entry>
		<id>http://vwiki.co.uk/index.php?title=Lab_Manager_Configuration_IP_List&amp;diff=1290&amp;oldid=prev</id>
		<title>Sstrutt: Updated to v2,0</title>
		<link rel="alternate" type="text/html" href="http://vwiki.co.uk/index.php?title=Lab_Manager_Configuration_IP_List&amp;diff=1290&amp;oldid=prev"/>
		<updated>2011-04-19T14:07:39Z</updated>

		<summary type="html">&lt;p&gt;Updated to v2,0&lt;/p&gt;
&lt;a href=&quot;http://vwiki.co.uk/index.php?title=Lab_Manager_Configuration_IP_List&amp;amp;diff=1290&amp;amp;oldid=1285&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Sstrutt</name></author>
	</entry>
	<entry>
		<id>http://vwiki.co.uk/index.php?title=Lab_Manager_Configuration_IP_List&amp;diff=1285&amp;oldid=prev</id>
		<title>Sstrutt: Initial creation</title>
		<link rel="alternate" type="text/html" href="http://vwiki.co.uk/index.php?title=Lab_Manager_Configuration_IP_List&amp;diff=1285&amp;oldid=prev"/>
		<updated>2011-04-18T13:22:17Z</updated>

		<summary type="html">&lt;p&gt;Initial creation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;#&lt;br /&gt;
=============================================================================================&lt;br /&gt;
 Lab Manager VM NAT Getter&lt;br /&gt;
=============================================================================================&lt;br /&gt;
 Simon Strutt  -  November 2010&lt;br /&gt;
=============================================================================================&lt;br /&gt;
&lt;br /&gt;
Version 1&lt;br /&gt;
 - Initial creation!&lt;br /&gt;
 &lt;br /&gt;
Version 1.1 - Dec 2010&lt;br /&gt;
 - Added bucketName when displaying list of config&amp;#039;s to better handle config&amp;#039;s with same name in different workspaces&lt;br /&gt;
 &lt;br /&gt;
Version 1.2 - Jan 2011&lt;br /&gt;
 - Added sorting by VM name&lt;br /&gt;
 &lt;br /&gt;
Version 1.3 - Feb 2011&lt;br /&gt;
 - Configuration selection menu...&lt;br /&gt;
 -- Now sorted by name&lt;br /&gt;
 -- Displays configs in yellow if they&amp;#039;re not shared&lt;br /&gt;
 &lt;br /&gt;
Version 1.4 - Apr 2011&lt;br /&gt;
 - Added RDP port test&lt;br /&gt;
 &lt;br /&gt;
=============================================================================================&lt;br /&gt;
#&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$start = Get-Date&lt;br /&gt;
&lt;br /&gt;
$UserFile = &amp;quot;User.fil&amp;quot;&lt;br /&gt;
$PassFile = &amp;quot;Pass.fil&amp;quot;                           # Encrypted file to store password in&lt;br /&gt;
$LabMgrSvr = &amp;quot;LM-Server&amp;quot;                         # Lab Manager server hostname&lt;br /&gt;
&lt;br /&gt;
Write-Host &amp;quot;Started script run at $start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# =============================================================================================&lt;br /&gt;
# Basic helper functions&lt;br /&gt;
&lt;br /&gt;
function PressAnyKeyToExit {&lt;br /&gt;
    Write-Host &amp;quot;Press any key to exit...&amp;quot;&lt;br /&gt;
    $x = $host.UI.RawUI.ReadKey(&amp;quot;NoEcho,IncludeKeyDown&amp;quot;)&lt;br /&gt;
    Exit&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# =============================================================================================&lt;br /&gt;
# Lab Manager SOAP connection functions (adapted from POSH - http://poshcode.org/753)&lt;br /&gt;
&lt;br /&gt;
function New-ObjectFromProxy {&lt;br /&gt;
	param($proxy, $proxyAttributeName, $typeName)&lt;br /&gt;
&lt;br /&gt;
	# Locate the assembly for $proxy&lt;br /&gt;
	$attribute = $proxy | gm | where { $_.Name -eq $proxyAttributeName }&lt;br /&gt;
	$str = &amp;quot;`$assembly = [&amp;quot; + $attribute.TypeName + &amp;quot;].assembly&amp;quot;&lt;br /&gt;
	invoke-expression $str&lt;br /&gt;
&lt;br /&gt;
	# Instantiate an AuthenticationHeaderValue object.&lt;br /&gt;
	$type = $assembly.getTypes() | where { $_.Name -eq $typeName }&lt;br /&gt;
	return $assembly.CreateInstance($type)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Connect-LabManager {&lt;br /&gt;
	param($server, $credential)&lt;br /&gt;
    &lt;br /&gt;
    Write-Host &amp;quot;Connecting to $server...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	# Log in to Lab Manager&amp;#039;s web service.&lt;br /&gt;
	$server = &amp;quot;https://&amp;quot; + $server + &amp;quot;/&amp;quot;&lt;br /&gt;
	$endpoint = $server + &amp;quot;LabManager/SOAP/LabManager.asmx&amp;quot;&lt;br /&gt;
    try {&lt;br /&gt;
	   $proxy = new-webserviceproxy -uri $endpoint -cred $credential -ErrorAction:Stop&lt;br /&gt;
    } catch {&lt;br /&gt;
        Write-Host $_&lt;br /&gt;
        if ($_.ErrorDetails.Message -match &amp;quot;401: Unauthorized&amp;quot;) {&lt;br /&gt;
            Remove-Item $UserFile&lt;br /&gt;
            Remove-Item $PassFile&lt;br /&gt;
            Write-Host &amp;quot;User/pass credential cache files have been deleted&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
             Write-Host $_.Exception.Message&lt;br /&gt;
             Write-Host $_.Exception.GetType().FullName&lt;br /&gt;
        }     &lt;br /&gt;
        PressAnyKeyToExit&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
	# Before continuing we need to add an Authentication Header to $proxy.&lt;br /&gt;
	$authHeader = New-ObjectFromProxy -proxy $proxy -proxyAttributeName &amp;quot;AuthenticationHeaderValue&amp;quot; -typeName &amp;quot;AuthenticationHeader&amp;quot;&lt;br /&gt;
	$authHeader.username = $credential.GetNetworkCredential().UserName&lt;br /&gt;
	$authHeader.password = $credential.GetNetworkCredential().Password&lt;br /&gt;
	$proxy.AuthenticationHeaderValue = $authHeader&lt;br /&gt;
	return $proxy&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function Ignore-SslErrors {&lt;br /&gt;
	# Create a compilation environment&lt;br /&gt;
	$Provider=New-Object Microsoft.CSharp.CSharpCodeProvider&lt;br /&gt;
	$Compiler=$Provider.CreateCompiler()&lt;br /&gt;
	$Params=New-Object System.CodeDom.Compiler.CompilerParameters&lt;br /&gt;
	$Params.GenerateExecutable=$False&lt;br /&gt;
	$Params.GenerateInMemory=$True&lt;br /&gt;
	$Params.IncludeDebugInformation=$False&lt;br /&gt;
	$Params.ReferencedAssemblies.Add(&amp;quot;System.DLL&amp;quot;) &amp;gt; $null&lt;br /&gt;
	$TASource=@&amp;#039;&lt;br /&gt;
	  namespace Local.ToolkitExtensions.Net.CertificatePolicy {&lt;br /&gt;
	    public class TrustAll : System.Net.ICertificatePolicy {&lt;br /&gt;
	      public TrustAll() { &lt;br /&gt;
	      }&lt;br /&gt;
	      public bool CheckValidationResult(System.Net.ServicePoint sp,&lt;br /&gt;
	        System.Security.Cryptography.X509Certificates.X509Certificate cert, &lt;br /&gt;
	        System.Net.WebRequest req, int problem) {&lt;br /&gt;
	        return true;&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
	  }&lt;br /&gt;
&amp;#039;@ &lt;br /&gt;
	$TAResults=$Provider.CompileAssemblyFromSource($Params,$TASource)&lt;br /&gt;
	$TAAssembly=$TAResults.CompiledAssembly&lt;br /&gt;
&lt;br /&gt;
	## We now create an instance of the TrustAll and attach it to the ServicePointManager&lt;br /&gt;
	$TrustAll=$TAAssembly.CreateInstance(&amp;quot;Local.ToolkitExtensions.Net.CertificatePolicy.TrustAll&amp;quot;)&lt;br /&gt;
	[System.Net.ServicePointManager]::CertificatePolicy=$TrustAll&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# ===============================================================================================&lt;br /&gt;
# TCP Port test function (adapted from POSH - http://poshcode.org/85)&lt;br /&gt;
function Test-Port {&lt;br /&gt;
    Param([string]$srv,$port=3389,$timeout=3000)&lt;br /&gt;
     &lt;br /&gt;
    # Does a TCP connection on port 3389 (RDP), port and timeout can be overriden&lt;br /&gt;
     &lt;br /&gt;
    $ErrorActionPreference = &amp;quot;SilentlyContinue&amp;quot;&lt;br /&gt;
     &lt;br /&gt;
    # Create TCP Client&lt;br /&gt;
    $tcpclient = new-Object system.Net.Sockets.TcpClient&lt;br /&gt;
     &lt;br /&gt;
    # Tell TCP Client to connect to machine on Port&lt;br /&gt;
    $iar = $tcpclient.BeginConnect($srv,$port,$null,$null)&lt;br /&gt;
     &lt;br /&gt;
    # Set the wait time&lt;br /&gt;
    $wait = $iar.AsyncWaitHandle.WaitOne($timeout,$false)&lt;br /&gt;
     &lt;br /&gt;
    # Check to see if the connection is done&lt;br /&gt;
    if(!$wait)&lt;br /&gt;
    {&lt;br /&gt;
        # Close the connection and report timeout&lt;br /&gt;
        $tcpclient.Close()&lt;br /&gt;
        Write-Host &amp;quot;Connection Timeout&amp;quot; -BackgroundColor DarkRed&lt;br /&gt;
        Return&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        # Close the connection and report the error if there is one&lt;br /&gt;
        $error.Clear()&lt;br /&gt;
        $tcpclient.EndConnect($iar) | out-Null&lt;br /&gt;
        if (!$?) {&lt;br /&gt;
             write-host $error[0] -BackgroundColor DarkRed&lt;br /&gt;
             $failed = $true&lt;br /&gt;
        }&lt;br /&gt;
        $tcpclient.Close()&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
    # Return $true if connection Establish else $False&lt;br /&gt;
    if (!$failed) {&lt;br /&gt;
        Write-Host &amp;quot;Connection successful&amp;quot; -BackgroundColor DarkGreen&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# ===============================================================================================&lt;br /&gt;
# Faff around with credentials and connect to Lab Manager server&lt;br /&gt;
&lt;br /&gt;
# Check for credential files, create if required&lt;br /&gt;
if (!(Test-Path $UserFile) -or !(Test-Path $PassFile)) {&lt;br /&gt;
    Write-Host &amp;quot;Credential files not found&amp;quot;&lt;br /&gt;
    $cred = Get-Credential -Credential ($env:userdomain + &amp;quot;\&amp;quot; + $env:username)&lt;br /&gt;
    $cred.UserName | Set-Content $UserFile -Force&lt;br /&gt;
    $cred.Password | ConvertFrom-SecureString | Set-Content $PassFile -Force&lt;br /&gt;
    Write-Host &amp;quot;Credentials saved&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
# Load password credential from encrypted file&lt;br /&gt;
$pass = Get-Content $PassFile | ConvertTo-SecureString&lt;br /&gt;
$user = Get-Content $UserFile&lt;br /&gt;
$cred = New-Object System.Management.Automation.PsCredential($user, $pass)&lt;br /&gt;
&lt;br /&gt;
# Connect to Lab Mgr server&lt;br /&gt;
Ignore-SslErrors&lt;br /&gt;
$labManager = Connect-LabManager -server $LabMgrSvr -credential $cred&lt;br /&gt;
Write-Host &amp;quot;Sucessfully connected to Lab Manager web service!&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# ==============================================================================================&lt;br /&gt;
# Get list of configurations, query user which to do, then get list of VM&amp;#039;s and IP&amp;#039;s&lt;br /&gt;
&lt;br /&gt;
$VMs = @()&lt;br /&gt;
$ConfIDs = @()&lt;br /&gt;
$confID = -99&lt;br /&gt;
&lt;br /&gt;
# Get list of config&amp;#039;s and display deployed only&lt;br /&gt;
Write-Host (&amp;quot;Deployed configurations...`n&amp;quot;)&lt;br /&gt;
$Configs = $labManager.ListConfigurations(1) &lt;br /&gt;
$Configs = $Configs | Sort name&lt;br /&gt;
foreach ($config in $Configs) {&lt;br /&gt;
    if ($config.isDeployed) {&lt;br /&gt;
        if ($FontColour -eq &amp;quot;Gray&amp;quot;) {&lt;br /&gt;
            $FontColour = &amp;quot;White&amp;quot;&lt;br /&gt;
        } else {&lt;br /&gt;
            $FontColour = &amp;quot;Gray&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
        if ($config.isPublic) {&lt;br /&gt;
            Write-host -ForegroundColor $FontColour (&amp;quot;ID &amp;quot; + $config.id + &amp;quot; - &amp;quot; + $config.name + &amp;quot;  [&amp;quot; + $config.bucketName + &amp;quot;]&amp;quot;)&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            Write-Host -ForegroundColor Yellow (&amp;quot;ID &amp;quot; + $config.id + &amp;quot; - &amp;quot; + $config.name + &amp;quot;  [&amp;quot; + $config.bucketName + &amp;quot;] - Not Shared !!&amp;quot;)&lt;br /&gt;
        }&lt;br /&gt;
        $ConfIDs += $config.ID                           # List of config ID&amp;#039;s (with which to validate user input)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get config ID from user&lt;br /&gt;
While (!($ConfIDs -contains $ConfID)) {   # Don&amp;#039;t leave loop until user selected config ID is valid!&lt;br /&gt;
    $ConfID = Read-Host &amp;quot;`nSelect a configuration ID [0 to quit]&amp;quot;&lt;br /&gt;
    if ($ConfID -eq 0) {&lt;br /&gt;
        # Dump the Lab Manager connection&lt;br /&gt;
        $labManager.Dispose()&lt;br /&gt;
        exit&lt;br /&gt;
    } elseif (!($ConfIDs -contains $ConfID)) {&lt;br /&gt;
        Write-Host &amp;quot;Invalid, should be one of&amp;quot; ([string]::join(&amp;quot;, &amp;quot;, $ConfIDs))&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get VM&amp;#039;s for selected config&lt;br /&gt;
$labManager.ListMachines($ConfID) | foreach {&lt;br /&gt;
    $vm = &amp;quot;&amp;quot; | Select ConfID, Config, Workspace, Description, VM_Name, VM_IntIP, VM_ExtIP, VM_State&lt;br /&gt;
    $vm.ConfID = $ConfID&lt;br /&gt;
    $vm.Config = $Configs |?{$_.id -eq $ConfID} | Select -ExpandProperty name&lt;br /&gt;
    $vm.Workspace = $Configs |?{$_.id -eq $ConfID} | Select -ExpandProperty bucketName&lt;br /&gt;
    $vm.Description = $Configs |?{$_.id -eq $ConfID} | Select -ExpandProperty description&lt;br /&gt;
    $vm.VM_Name = $_.name&lt;br /&gt;
    $vm.VM_IntIP = $_.internalIP&lt;br /&gt;
    $vm.VM_ExtIP = $_.externalIP&lt;br /&gt;
    $vm.VM_State = $_.status        # 1=Off, 2=On, 3=Suspended, 4=Stuck, 128=Invalid&lt;br /&gt;
    $VMs = $VMs + $vm&lt;br /&gt;
}&lt;br /&gt;
$VMs = $VMs | Sort VM_Name&lt;br /&gt;
$VMs | Select VM_Name, VM_IntIP, VM_ExtIP | Format-Table&lt;br /&gt;
&lt;br /&gt;
# Dump the Lab Manager connection&lt;br /&gt;
$labManager.Dispose()&lt;br /&gt;
$end = Get-Date&lt;br /&gt;
&lt;br /&gt;
# ==============================================================================================&lt;br /&gt;
# Email results to user&lt;br /&gt;
&lt;br /&gt;
$EmailTo = $env:username + &amp;quot;@michaelpage.com&amp;quot;&lt;br /&gt;
$tmp = Read-Host &amp;quot;Email to [$EmailTo]&amp;quot;&lt;br /&gt;
if ($tmp) {$EmailTo = $tmp}&lt;br /&gt;
&lt;br /&gt;
Write-Host &amp;quot;Emailing $EmailTo...&amp;quot; -nonewline&lt;br /&gt;
&lt;br /&gt;
# Create HTML for email&lt;br /&gt;
[string]$msgHTML = &amp;quot;&amp;lt;!-- Genenerated by &amp;quot; + ($MyInvocation.MyCommand.Name) + &amp;quot; script at &amp;quot; + (Get-Date).ToString() + &amp;quot; hrs --&amp;gt;`n&amp;quot;&lt;br /&gt;
$msgHTML += &amp;quot;&amp;lt;html xmlns=&amp;#039;http://www.w3.org/TR/REC-html40&amp;#039;&amp;gt;`n`n&amp;lt;head&amp;gt;`n&amp;lt;meta http-equiv=Content-Type content=&amp;#039;text/html; charset=uk&amp;#039;`n&amp;gt;&amp;quot;&lt;br /&gt;
$msgHTML += &amp;quot;&amp;lt;meta name=Generator content=&amp;#039;Lab Manager NATs script&amp;#039;&amp;gt;`n&amp;lt;meta name=Author content=&amp;#039;Simon Strutt&amp;#039;&amp;gt;`n&amp;lt;/head&amp;gt;`n`n&amp;quot;&lt;br /&gt;
$msgHTML += &amp;quot;&amp;lt;body style=&amp;#039;font-family: arial; font-size: 10;&amp;#039;&amp;gt;&amp;lt;table style=&amp;#039;font-family: arial; font-size: 11&amp;#039;;&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;`nConfiguration:&amp;lt;td&amp;gt;&amp;lt;b&amp;gt;&amp;quot; + $vm.Config + &amp;quot;&amp;lt;/b&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;`nWorkspace:&amp;lt;td&amp;gt;&amp;quot; + $vm.Workspace&lt;br /&gt;
$msgHTML += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;`nDescription:&amp;lt;td&amp;gt;&amp;quot; + $vm.Description + &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Info correct at:&amp;lt;td&amp;gt;&amp;quot; + $end.ToString() + &amp;quot; hrs&amp;lt;/table&amp;gt;`n&amp;quot;&lt;br /&gt;
$msgHTML += &amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;`n`n&amp;quot;&lt;br /&gt;
$msgHTML += &amp;quot;&amp;lt;table border=1 style=&amp;#039;border-width: 1px; border-spacing: 0; border-color: black; background-color: #faf0e6; font-family: arial; font-size: 11; font-weight: bold&amp;#039;&amp;gt;`n&amp;quot;&lt;br /&gt;
$msgHTML += &amp;quot;&amp;lt;tr style=&amp;#039;border-width: 2px; background-color: #fcf7f8;&amp;#039;&amp;gt;&amp;lt;th&amp;gt;VM Name&amp;lt;th&amp;gt;Internal IP&amp;lt;th&amp;gt;External IP`n&amp;quot;&lt;br /&gt;
foreach ($vm in $VMs) {&lt;br /&gt;
    $msgHTML += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;quot; + $vm.VM_Name + &amp;quot;&amp;lt;td style=&amp;#039;font-weight: normal&amp;#039;&amp;gt;&amp;quot; + $vm.VM_IntIP + &amp;quot;&amp;lt;td&amp;gt;&amp;quot; + $vm.VM_ExtIP&lt;br /&gt;
}&lt;br /&gt;
$msgHTML += &amp;quot;&amp;lt;/table&amp;gt;`n`n&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;`n&amp;lt;table style=&amp;#039;font-family: arial; font-size: 10; color: #888888&amp;#039;&amp;gt;`n&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Script started : &amp;lt;td&amp;gt;&amp;quot; + $start.ToString() + &amp;quot; hrs`n&amp;quot;&lt;br /&gt;
$msgHTML += &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Script finished : &amp;lt;td&amp;gt;&amp;quot; + $end.ToString() + &amp;quot; hrs`n&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Generated by script: &amp;lt;td&amp;gt;&amp;quot; + ($MyInvocation.MyCommand.Name)&lt;br /&gt;
$msgHTML += &amp;quot;`n&amp;lt;/table&amp;gt;`n`n&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Send via email&lt;br /&gt;
$smtp = New-Object Net.Mail.SmtpClient -arg &amp;quot;mailrelay.uk.michaelpage.local&amp;quot;&lt;br /&gt;
$msg = New-Object Net.Mail.MailMessage&lt;br /&gt;
    &lt;br /&gt;
$msg.From = &amp;quot;VI-Mgmt@michaelpage.local&amp;quot;&lt;br /&gt;
$msg.To.Add($EmailTo)&lt;br /&gt;
$msg.Subject = &amp;quot;Lab Manager configuration: &amp;quot; + $vm.Config &lt;br /&gt;
$msg.IsBodyHTML = $true&lt;br /&gt;
$msg.Body = $msgHTML&lt;br /&gt;
    &lt;br /&gt;
try {&lt;br /&gt;
    $smtp.Send($msg)&lt;br /&gt;
} catch {&lt;br /&gt;
    Write-Host &amp;quot;`n&amp;quot; $_&lt;br /&gt;
    Write-Host &amp;quot;`nCopy text above if you want to retain the info.&amp;quot;&lt;br /&gt;
    PressAnyKeyToExit&lt;br /&gt;
}&lt;br /&gt;
Write-Host &amp;quot;sent !`n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Check RDP access to powered-on VM&amp;#039;s&lt;br /&gt;
$tmp = &amp;quot;N&amp;quot;&lt;br /&gt;
$tmp = Read-Host &amp;quot;Do you want test RDP port to powered on VMs? [$tmp]&amp;quot;&lt;br /&gt;
if ($tmp -match &amp;quot;Y&amp;quot;) {&lt;br /&gt;
    foreach ($vm in $VMs) {&lt;br /&gt;
        if ($vm.VM_State -eq 2) {&lt;br /&gt;
            Write-Host ($vm.VM_Name).PadRight(16) ($vm.VM_ExtIP).PadRight(15) -nonewline&lt;br /&gt;
            Test-Port $vm.VM_ExtIP&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}       &lt;br /&gt;
    &lt;br /&gt;
PressAnyKeyToExit&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:VMware]]&lt;br /&gt;
[[Category:PowerShell]]&lt;/div&gt;</summary>
		<author><name>Sstrutt</name></author>
	</entry>
</feed>