Lab: Connect to your ServerCore using remoting - step by step


The next part in my Lab setup now that I’ve gotten network configured is to actually no longer touch my new Lab machine…

While that might sound strange at first, the reason for this is simple. My Lab should be a headless server, stuffed in a cabinet somewhere with power and a network connection and I should be able to do ALL my management tasks remotely.

This should be a simple task you’d say, but for the sake of clarity [and to learn this process better myself] I have decided to write down all the steps required to do this.

What is the goal and what is required

I think it helps to first define your goals before you start tinkering with a solution, as you might be easily distracted and not reach the goal you had set for yourself. According to your goals, you note down what steps are required to reach those goals. Don’t get me wrong, not the immediate script, just the simple text version of what you think you need to do to achieve the goal.

This is especially helpful for me, as I tend to get distracted a LOT! Think Hammy from Over the Hedge or Dug from UP!

My goal in this case are as follows:

  • Connect to ServerCore using the computername through PSRemoting.

What is required:

  • Add the ServerCore’s computer name to my client’s hosts file
  • Add the ServerCore’s computername to my client’s Trusted Clients settings under WSMAN
  • Connect to ServerCore WSMAN
  • Add the client’s IP address to the ServerCore’s Trusted Clients settings under WSMAN

The code

Please note: these steps require PowerShell to be run as Administrator.

First of all we want to define some variable which we want to use later on

1
2
$SName = 'ACME-SRV001'
$SIP = '192.168.0.100'

Of course we want to automate the addition of the ServerCore’s computername to the local hosts file, but in case we’ve already done this, we need to build in a check

1
2
3
4
5
6
7
8
$HostsFile = $env:SystemRoot + '\System32\Drivers\etc\hosts'
$Hosts = Get-Content $HostsFile
$Line = "$SIP`t$SName"
    If ($Hosts -notcontains $line) {
        $Hosts = $Hosts + $line
        Write-Output "Adding... $line"
    }
$Hosts | Set-Content $HostsFile Force

To explain: I’m reading the contents of the current Hosts file, located here:  C:\Windows\System32\drivers\etc\hosts . Just in case you’ve installed Windows in another folder, the script automatically gets the correct location. It will then check if the Hosts file already contains a line with the ServerCore’s IP address and Name. If this is not there, it will automatically add this line to the $Hosts variable. Once this is done it will write the contents of this variable back to the actual file and force it.

Please note: these steps require PowerShell to be run as Administrator.

Now that you’ve changed the Hosts file, we need to add the ServerCore machine to our WSMAN Trusted Clients.

1
2
3
4
5
6
7
8
$CurrentLocalTrustedHosts = (Get-Item -Path WSMan:\localhost\Client\TrustedHosts).value

if ([string]::IsNullOrEmpty($CurrentLocalTrustedHosts)) {
  Set-Item -Path 'WSMan:\localhost\Client\TrustedHosts' -Value "$SName" -Force
  }
else {
Set-Item -Path WSMan:\localhost\Client\TrustedHosts -Value "$CurrentLocalTrustedHosts,$SName" -Force
}

This will first read out the currently configured Trusted Hosts on your client machine and will then add the ServerCore to this list. In case you DON’T have any Trusted Hosts configured on your client machine yet it will only add the ServerCore machine.

To check that everything is configured properly [or to check if you have any Trusted Hosts configured on your machine], you can run the following command:

1
Get-Item -Path WSMAN:\localhost\Client\TrustedHosts

Please note: these steps require PowerShell to be run as Administrator.

While PSRemoting is enabled on Windows Server 2012 R2, it isn’t configured to allow connections from your Client machine. WSMAN on the other hand is 🙂 .

We can simply create a connection to the machine by using the following commands:

1
2
3
$SCred = Get-Credential -Credential "$SName\Administrator"

Connect-WSMan -ComputerName $SName -Credential $SCred

Please note: these steps require PowerShell to be run as Administrator.

Now comes the tricky part: We want to automatically get our Client machine’s IP Address and add this to the ServerCore’s Trusted Hosts list.

First we get our Client’s IP Address [requires PowerShell v4 and Windows 8+]:

1
$LocalIP = Get-NetAdapter -Physical | Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.IPAddress -like '192.168.0.*'} | Select-Object -ExpandProperty IPAddress

Now that we have the Client machine’s IP Address, we can add this to the ServerCore’s Trusted Hosts:

1
2
3
4
5
6
7
$CurrentServerTrustedHosts = (Get-Item -Path "WSMan:\$SName\Client\TrustedHosts").value
if ([string]::IsNullOrEmpty($CurrentServerTrustedHosts)) {
  Set-Item -Path "WSMan:\$SName\Client\TrustedHosts" -Value "$LocalIP" -Force
  }
else {
Set-Item -Path "WSMan:\$SName\Client\TrustedHosts" -Value "$CurrentServerTrustedHosts,$LocalIP" -Force
}

Once again we want to check if everything’s properly configured:

1
Get-Item -Path "WSMAN:\$SName\Client\TrustedHosts"

The result

Once this is done, you should be able to do the following

1
2
Enter-PSSession -ComputerName $SName -Credential $SCred
hostname

Tada!! 🙂