Functions/LabVM/Enter-LabVMSession.ps1
#Requires -Version 5.0 function Enter-LabVMSession { [CmdletBinding(DefaultParameterSetName = 'MachineName')] param ( [Parameter(Mandatory = $true, ParameterSetName = 'Machine', ValueFromPipeline = $true)] [LabMachine]$Machine, [Parameter(Mandatory = $true, Position = 0, ParameterSetName = 'MachineName')] [string]$MachineName, [PSCredential]$Credential, [Parameter(Mandatory = $false)] [string]$NetworkAdapterName, [Parameter(Mandatory = $false)] [switch]$CredSSP ) if (-not (Test-Administrator)) { throw 'Please run this command as Administrator.' } if ($($PSCmdlet.ParameterSetName) -ne 'Machine') { if ($MachineName) { $Machine = Get-LabMachine -Name $MachineName } else { $Machine = Get-LabMachine } } if (-not $Machine) { return } if (-not $Credential) { $domainNetwork = $Machine.NetworkAdapters.Network | Where-Object { $_.Domain } | Select-Object -First 1 if ($domainNetwork) { $domain = $domainNetwork.Domain if ($domain.AdministratorPassword) { $Credential = New-Object -TypeName PSCredential -ArgumentList "$($domain.NetbiosName)\Administrator",$domain.AdministratorPassword } } if (-not $Credential) { $Credential = New-Object -TypeName PSCredential -ArgumentList "$($Machine.Name)\Administrator",$Machine.AdministratorPassword } } $vm = Get-VM | Where-Object { $_.Name -eq $Machine.Name } if (-not $vm) { throw "Lab-VM with name '$($Machine.Name)' not found" } if ($NetworkAdapterName) { $ipAddress = $vm ` | Get-VMNetworkAdapter ` | Select-Object -Property * -ExpandProperty IPAddresses ` | Where-Object { $_.Name -eq $NetworkAdapterName -and $_.Contains('.') } ` | Select-Object -First 1 } else { $ipAddress = $vm ` | Get-VMNetworkAdapter ` | Select-Object -Property * -ExpandProperty IPAddresses ` | Where-Object { $_.Contains('.') } ` | Select-Object -First 1 } if (-not $ipAddress) { throw "Unable to determine ip-address for Lab-VM with name '$($Machine.Name)'" } if ($CredSSP.IsPresent) { return Enter-PSSession -ComputerName $ipAddress -Credential $Credential -Authentication Credssp } else { return Enter-PSSession -ComputerName $ipAddress -Credential $Credential } } |