Setup a New Microsoft Windows Server 2019 Core Installation to Accept Incoming PowerShell Connections in a Workgroup

#Setup a New Microsoft Windows Server 2019 Core Installation to Accept Incoming PowerShell Remoting connections in a Workgroup


#You will not need to do this if you perform your PowerShell tasks directly from a domain connected computer.  You need this if you have virtual machines or headless devices… or just plain lazy. Also not everyone has a domain controller and sometimes even a Hyper-V host computer will remain in a workgroup since it might host the domain controller and it is off topic… I work in PowerShell ISE for the most part and connect to where ever I need to.


#This is the first steps after a fresh clean install of Microsoft Windows Server 2019 Core to allow PowerShell Remoting and WSMan.

Initial Screen Ctrl, Alt,_Del_Server 2019 Core

#Press Ctrl-Alt-Delete to begin configuring Microsoft Windows Server 2019 Core

Change password before signing in Server 2019 Core

#Press Enter to select OK to change password

Set local administrator password Server 2019 Core

#Set password for .\administrator

Your password has been changed Server 2019 Core

#This initial password is for the local administrator account .\administrator is also a way to access this account. It is not part of active directory and therefore doesn’t fall under the Active Directory password policy. Do not make it something easy to guess. The standard policy require 8 characters minimum with upper and lower case letters, numbers and symbols. I suggest you follow that as this password will be passed to your initial domain administrator account, where it will fail to work, so it is just best to avoid issues.

Microsoft Windows Server 2019 Core command prompt Server 2019 Core

#This is cmd.exe start screen for Microsoft Windows Server 2019 Core. Type sconfig to bring up the cheater menu.

Run Powershell Server 2019 Core

#Type powershell and press enter to start a PowerShell session directly in Microsoft Windows Server 2019 Core cmd.exe prompt.

Enable-PSRemoting -Force Server 2019 Core

#Type Enable-PSRemoting -Force to enable PowerShell Remoting. You can use -SkipNetworkProfileCheck to allow management requests on a network Microsoft Windows has categorized as Public such as Hotspots and new unrecognized networks.

Get-Item WSMan clients trustedhosts Server 2019 Core

#This will show you what computers you “trust” to connect remotely via PowerShell Remote, no remote hosts are allowed by default.

Set-Item -Value IP addresses and computer names verify Server 2019 Core

#This creates a list of computers you “trust” so that you wish to make outgoing PowerShell Remote connections. It doesn’t need a value if you don’t plan to connect to other computers from this new server and/or just use a management PC. 

#This is not a list of computers that are allowed to use Enter-PSSession to connect to the new server and most likely you need to run this command on a Windows 10 management PC instead. You would include either the IP address of the new server, the computer name of the new server or ‘*’ if you want to be able to connect to anywhere.

#The code below will add entries to the TrustedHosts rather than overwrite them:

You can now connect via Eter-PSSession Server 2019 Core

#You can use either the server IP address or computer name if you need to perform this step.  I choose to use both so I avoid any issues when connecting. You need to type y and press Enter to confirm.  A value of ‘*’ allows the server to connect to any remote host.

#Now you can use Enter-PSSession to connect to your Microsoft Windows Sever 2019 Core install to configure it using PowerShell or RSAT tools.


#At this point you probably do not have Active Directory installed so you would use the command below to connect to the server. I use PowerShell ISE to open my list of common commands and just run them remotely from my desktop computer. After the -Cn is whatever IP address or computer name you added to WSMan:\localhost\Client\TrustedHosts


#If you are running Microsoft Windows 2019 Core on Hyper-V then you can connect the way shown above from anywhere. You could connect the way below, from the Hyper-V host, if that isn’t also a core installation.  Be aware that connecting -VMName Vs. -ComputerName can cause some commands to behave differently or not at all.

Installing and configuring PowerShell 7.2.1 on 64-bit Server 2019 and Windows 10

#Installing and configuring PowerShell 7.2.1 on 64-bit Server 2019 and Windows 10

#The installation commands shown here are for the latest stable release of PowerShell 7

#To be honest I don’t recommend upgrading if you plan to keep using all your existing scripts and commands without issue.  That most likely will not happen. PowerShell 7 doesn’t work well with Microsoft 365 and Microsoft Azure.  The login command fails, for example.  There might be a work around using the Microsoft Graph API but I haven’t managed to get that working.  The differences between PowerShell 5 and PowerShell 7 are discussed here.

 #I need to use the older Microsoft only releases of PowerShell for most of what I do.  PowerShell 7 does work on many non-Windows platforms but do not expect to use PowerShell 7 to manage your hard drives in Linux.  PowerShell 5.x and PowerShell 6.x only work on Microsoft Windows-based computers.

#It should also be mentioned that PowerShell 5 and PowerShell 7 run along side each other and is determined by which shell you choose to work in.  Another problem is that PowerShell ISE is not designed to work with PowerShell 7 and not included.


From Microsoft: 

#Is PowerShell ISE going away?

 
The PowerShell ISE is no longer in active feature development. As a shipping component of Windows, it continues to be officially supported for security and high-priority servicing fixes. … Users looking for replacement for the ISE should use Visual Studio Code with the PowerShell Extension.
 

 

PowerShell 7.2.1 can be downloaded for 64-bit Windows-based operating systems from the link below: 

https://github.com/PowerShell/PowerShell/releases/download/v7.2.1/PowerShell-7.2.1-win-x64.msi

Get more information about the latest version of Microsoft PowerShell 7.2 LTS from the link below:

https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.2


#Open firewall to allow PowerShell access to and from other computers on your network:

 

Using Set-Alias In PowerShell To Create Shortcuts To Functions In Windows 10

#Using Set-Alias In PowerShell To Create Shortcuts To Functions In Windows 10

#These commands also work in both PowerShell and PowerShell Direct. You can also do this in Microsoft Windows Server 2019.

#Just the code:


#The Longer Story…

#These are two basic functions, but the functions you control with Set-Alias can be much more complicated.  An Alias is just a shortcut to a command with a long name, but without any parameters. Parameters still need to be added to most commands when running an Alias. A function can contain commonly used parameters or even more complex command structures. You will also need to add permanent functions to your $Profile for PowerShell and PowerShell ISE separately since they are controlled by two different startup files.

#Using Set-Alias In PowerShell To Create Shortcuts To Functions

#As an example, I am going to create a function to run Enter-PSSession to connect using PowerShell Remote. I also create a similar function to connect using PowerShell Direct so I just type the value of either the -VMName or the -ComputerName to enter my password and connect.

#KERMIT is the computer name of my server. The name of the virtual machine is Server2019. These commands would need to be modified to fit your environment.

#List available Functions using Out-GridView in PowerShell ISE or not

#Note: Out-GridView does not work in a remote session or in PowerShell command prompt.

#Check the pre-defined list of aliases using Out-GridView in PowerShell ISE or not

#See pre-defined Alias list

#Create Two New Functions To Connect To Server Using PowerShell Remote and PowerShell Direct

#One function called funk_cnkermit initiates a connection to the computer name (-ComputerName) of the server and the other, funk_vmserver2019, connects to a virtual machine name (-VMName). The function name can be anything that is guaranteed to stay unique. The command inside the {} could be any commands that you find useful and use frequently. Multiple lines of code are also supported.

#Use The Set-Alias PowerShell Command To Create Shorter Commands And To Trigger Custom Functions Into Action Without Repetitive Keystrokes

#Set an alias to each new function using the computer name kermit and the virtual machine name server2019 using the commands below:

 #Here Is A Useful Docker Function I Created

#I’m sure there are much more complicated functions that I’ll add along the way, but just having an alias to Enter-PSSession is such a time saver. Don’t forget to use AutoComplete or Tab to save time when typing all of Docker-CleanExitedContainers. Once the Alias is set, it will be as if it was a command in the environment path.

 

Enable File And Printer Sharing In Windows 10 Creators Edition Without Using The netsh Command In PowerShell

#Enable File And Printer Sharing In Windows 10 Without Using The netsh Command in PowerShell

#It is as simple as enabling  the pre-configured rule in Windows Firewall to enable File and Printer Sharing in Windows 10 but using netsh is the old fashion way.

#Run this command in an elevated PowerShell prompt and you are done.


#The Long Story…

#Allow File and Printer Sharing services through the Windows Firewall to access shared information and to share information of your own. These commands all work in both in PowerShell and PowerShell Direct.

#Get Firewall rules for File and Printer Sharing

#This command shows the individual rules and the network connection profiles that  are explicitly enabled and disabled for the File and Printer Sharing services.

#Enable File and Printer Sharing for Private and Domain network profiles

#Enable the  File and Printer Sharing services for the Private and Domain network connection profiles by applying the preconfigured Windows Firewall group rule called File and Printer Sharing by typing this:

#▲That is what it looks like under Advanced Sharing Settings when the File and Printer Sharing firewall rule is enabled.

#Set Network Connection Profile to Private.

#I set the variable $InterfaceAlias to automatically query my primary network interface or NIC. The -NlMtuBytes 1500 switch is what makes it work. If you have changed the Maximum Transmission Unit (MTU) from the defaults then this command will need to be modified:

#Disable File and Printer Sharing on all network profiles

#▲It will look like this when File and Printer Sharing is disabled.