WSA Module 01: Windows Server Fundamentals

Slide 1 of 28 ← Course Overview

Windows Server Fundamentals

Your journey into Windows Server administration starts here. Nine stops, one foundation block, the bottom of the WSA Lego kit.

What you'll learn

  • Editions & install modes — Std / DC, Desktop / Core
  • Server Manager & Roles — the GUI, roles/features
  • PowerShell ★ — verb-noun, pipeline, Where-Object
  • Essential commands — services, processes, init-config
  • Remote mgmt — RDP, PSRemoting, WAC, Server Core
Where this fits: Foundation block of the WSA Lego kit. Maps to CTS1328C Objective #1 and the AZ-800 exam. PowerShell (★) is the pillar every later module builds on.
Module 01 — your journey 1Editions 2Install Modes 3Server Mgr 4Roles 5PowerShell ★ 6Commands 7Init Config 8Remote Mgmt 9Server Core → next: M02 — Active Directory

Windows Server Editions

Windows Server 2022 comes in several editions, each designed for different workloads and environments.

Edition Use Case Licensing
Standard Physical or lightly virtualized environments Per-core + CALs, 2 VMs included
Datacenter Highly virtualized datacenters Per-core + CALs, Unlimited VMs
Essentials Small business (≤25 users) Per-server, no CALs
Azure Edition Azure hybrid integration Hotpatch (no reboots)
Key: Standard vs Datacenter = virtualization rights. Datacenter for >2 VMs per host.
Edition comparison Standard2 VMsincludedPer-core +CALs Datacenter∞ VMsunlimitedPer-core + CALs Essentials≤25 usersSmall bizPer-serverno CALs Azure EditioncloudHotpatchno rebootsAzure-only Datacenter pulses, the heavily-virtualized choice

Installation Options

Windows Server can be installed in two modes. This decision is made during installation and affects how you manage the server.

Desktop Experience

  • Full GUI + Server Manager
  • Larger footprint (~10GB more)
  • Best for: learning, legacy apps

Server Core

  • Command-line only
  • Smaller footprint, fewer updates
  • Best for: production, security
One-way: Desktop → Core without reinstall. Attack surface = exploitable services/ports; less installed = fewer ways in.
Two install modesDesktop ExperienceGUI + Server Manager~10 GB more disklarger attack surfaceBest for: learningServer CoreC:\> hostnameDC01C:\> powershellPS C:\> Get-ServiceRunning BFE ...PS C:\> _Command-line onlysmaller footprintreduced attack surfaceBest for: production

Server Manager

Server Manager is the central management console for Windows Server with Desktop Experience. It launches automatically at logon.

Server Manager Dashboard

  • Welcome Tile — quick actions (Add roles, Add servers)
  • Roles & Groups — monitor installed roles across servers
  • Events / Services / Performance — aggregated quick views
  • BPA Results — Best Practices Analyzer findings
Pro Tip: Add remote servers via Manage → Add Servers for a single pane of glass.
Server Manager DashboardManage ▾   Tools ▾   View ▾   HelpWelcomeAdd rolesAdd serversCreate groupsRoles12installedEventsPerformanceServices● Running   142● Stopped    28BPA Results⚠ 3 warnings to review✓ 47 checks passedSingle pane of glass for local + remote servers

Roles and Features

Windows Server functionality is divided into Roles (major services) and Features (supporting capabilities).

Common Server Roles

Role Purpose
Active Directory Domain Services Identity management, domain authentication
DNS Server Name resolution for the domain
DHCP Server Automatic IP address assignment
File and Storage Services File sharing, storage management
Hyper-V Virtualization platform
Web Server (IIS) Host websites and web applications
Installation: Server Manager → Manage → Add Roles and Features Wizard
Roles & Features stack on the serverWindows Serverbase OS(Server Manager → Add Roles)AD DSidentityDNSname resolutionDHCPIP assignmentFile & StorageSMB sharesHyper-VvirtualizationIISweb hostingPrint & Docprint server

PowerShell: Verb-Noun Pattern

PowerShell is the backbone of modern Windows Server administration, every GUI action has a PowerShell equivalent and PowerShell can do much more.

PowerShell commands (called cmdlets) follow a consistent Verb-Noun pattern that tells you exactly what each command does:

  • Get-Service, Get-Process, Get-EventLog (retrieve info)
  • Set-ExecutionPolicy, Set-Service (modify settings)
  • New-Item, New-ADUser (create objects)
  • Remove-Item, Remove-WindowsFeature (delete objects)
Every cmdlet = Verb-NounVerbwhat to do-Nounwhat to act oncmdletpredictableExamples:Get-ServiceSet-ExecutionPolicyNew-ADUserRemove-ItemReading the name tells you what it does

Checking PowerShell Version

PowerShell built-in variables start with $. $PSVersionTable tells you which PowerShell is running — PS 5.1 (built into Windows Server) and PS 7+ (cross-platform, installed separately) support different cmdlets. Output table shown on the right.

# Query the built-in $PSVersionTable variable PS C:\> $PSVersionTable
Check PowerShell VersionPowerShellPS C:\> $PSVersionTable_Name Value──── ─────PSVersion 5.1.20348.2849PSEdition DesktopCLRVersion 4.0.30319.42000PSCompatibleVersions {1.0, 2.0, 3.0...}PS C:\> _

Discovering Cmdlets & Help

Two cmdlets you'll use constantly: Get-Command -Verb X to discover ("show me every Get- cmdlet"), Get-Help with -Examples / -Full / -Online to learn how to use one.

# List every cmdlet that starts with "Get-" PS C:\> Get-Command -Verb Get
# Show help for Get-Service with working examples PS C:\> Get-Help Get-Service -Examples
Discover & learn cmdletsGet-Commandfind cmdletsGet-AclSecurityGet-ServiceManagementGet-ProcessManagement...hundreds moreGet-Helplearn how to use themNAME Get-ServiceSYNOPSIS Gets the services on the computer. ── Example 1 ── PS> Get-Service ── Example 2 ── PS> Get-Service -Name

The PowerShell Pipeline

The pipeline operator | sends the output of one command directly into another for filtering, sorting, or formatting, all in a single line.

The pipe is a conveyor belt: the left command produces objects, the right command processes each one. Unlike Linux pipes that pass raw text, PowerShell pipes pass full objects with inspectable, filterable properties.

# Send all services to Select-Object to show only the first 5 PS C:\> Get-Service | Select-Object -First 5
Get-Service produces objects | S1 S2 S3 S4 S5 Select-Object -First 5 processes each PowerShell objects flow through the pipe (unlike Linux pipes that pass raw text) Source Pipe Consumer

Filtering with Where-Object

Where-Object passes through only the objects matching your condition. The condition lives inside a script block { }.

Inside the script block, $_ is the current object. Access its properties with a dot ($_.PropertyName). The operator -eq means "equals."

# Keep only services where Status equals 'Running' PS C:\> Get-Service | Where-Object { $_.Status -eq 'Running' }
# Output: Status Name DisplayName Running BFE Base Filtering Engine Running CryptSvc Cryptographic Services
Where-Object filters the pipelineGet-Serviceall services(Running + Stopped)filter$_.Status-eq 'Running'Running onlyStopped blockedThe script block { $_.Status -eq 'Running' } runs once per object.$_ = the current object; .Status = access its property.Objects passing the test continue down the pipeline.Green pass, red blocked

Where-Object: anatomy of the command

Let's take that filter command apart and look at what each piece does. The canvas on the right starts empty — every piece appears in turn as we introduce it.

Once you can read this command, you can build any filter:

  • Six pieces, in order, left to right
  • Each piece does one job
  • The whole command keeps services where Status equals 'Running'
Quick reference — comparison operators:
-eq equals · -ne not equal · -gt/-lt greater/less · -like wildcard (e.g. 'Win*')
Build the command, piece by piece PS C:\> _ Get-Service | Where-Object { $_ . Status -eq 'Running' } 1 Get-Service retrieves every service on the machine 2 | the pipe — carries objects to the next command 3 Where-Object the filter cmdlet — keeps objects that pass a test 4 { } script block — the test runs once per object 5 $_.Status $_ is the current object; .Status reads its property 6 -eq 'Running' the comparison — keep only matches → Result: only the Running services come through the pipe

Chaining Multiple Pipes

Each | passes objects to the next cmdlet, building a data-processing assembly line. Sort-Object -Descending + Select-Object -First N is the canonical top-N pattern. Right panel shows the pipe flow.

# Get processes → sort by CPU usage → take the top 5 PS C:\> Get-Process | Sort-Object CPU -Descending | Select-Object -First 5
Lab Preview: Lab 2 uses Get-WindowsFeature | Where-Object { $_.Installed -eq $true } — same pattern.
Pipeline chainGet-Processall processes|Sort-Object CPU-Descending|Select-Object-First 5Each pipe transforms the data:step 1: get allstep 2: sort by CPUstep 3: top 5Handles NPM(K) PM(K) WS(K) CPU(s) Id ProcessName 1842 98 245612 301244 184.33 4012 svchost 623 31 87204 93180 72.08 2548 ServerManager 412 22 51020 58432 31.55 876 lsass

Essential Commands: System Info

First on any new server: get its identity and hardware details. Two commands, one for the full picture, one for the quick answer.

# Pull detailed hardware, OS, and domain info PS C:\> Get-ComputerInfo
# Output: WindowsProductName WindowsVersion CsDomain Windows Server 2022 Standard 21H2 corp.local
# Quick identity check, just the hostname PS C:\> hostname DC01
Get-ComputerInfo + hostnameDC01corp.localWindows Server 2022StandardPS> Get-ComputerInfoWindowsProductNameWindows Server 2022CsDomain   corp.localPS> hostnameDC01Full picture or quick answer, whichever you need

Essential Commands: Services

Services are the backbone of Windows Server. Check which ones are running, start stopped services, restart misbehaving ones.

# Show only services currently running PS C:\> Get-Service | Where-Object {$_.Status -eq 'Running'}
# Start the Print Spooler service PS C:\> Start-Service -Name Spooler
# Restart the Windows Time service to force a time resync PS C:\> Restart-Service -Name W32Time
Service control: query, start, restartRUNRunningBFE, W32Time...STOPStoppedSpooler...CYCLERestartingW32Time...Get-Service| Where RunningStart-Service-Name SpoolerRestart-Service-Name W32TimeSame Verb-Noun pattern, three different actions

Essential Commands: Processes

When a server is slow, find which processes are consuming the most CPU.

# Sort processes by CPU usage, top 10 consumers PS C:\> Get-Process | Sort-Object CPU -Descending | Select-Object -First 10
# Output: Handles NPM(K) PM(K) WS(K) CPU(s) Id ProcessName 1842 98 245612 301244 184.33 4012 svchost 623 31 87204 93180 72.08 2548 ServerManager 412 22 51020 58432 31.55 876 lsass
Top processes by CPUProcessNameCPU(s)Barsvchost184.33ServerManager72.08lsass31.55explorer22.14winlogon8.41Get-Process | Sort-Object CPU -Descending | Select-Object -First 5

Essential Commands: Event Logs

Event logs are your server's diary. Check recent entries or filter by error level when troubleshooting.

# 20 most recent entries from the System event log PS C:\> Get-EventLog -LogName System -Newest 20
# Filter the System log to show only Error-level entries PS C:\> Get-EventLog -LogName System -EntryType Error
# Output (errors only): Index Time EntryType Source EventID Message 8839 Feb 08 08:30 Error NETLOGON 5719 No domain control...
Pro Tip: Use Get-Help cmdlet -Online to open Microsoft docs in your browser for any command.
System event log — Newest 20 (Errors highlighted) PS C:\> Get-EventLog -LogName System -Newest 20 Index Time EntryType Source EventID Message ----- ----------- --------- ------------ ------- ---------------- 8842 Feb 08 10:15 Info Svc Ctrl Mgr 7036 Service started 8841 Feb 08 10:12 Warn Win32k 263 Display driver 8840 Feb 08 09:58 Info EventLog 6013 System uptime 8839 Feb 08 08:30 Error NETLOGON 5719 No domain ctrl 8838 Feb 07 22:10 Error Disk 11 Driver detected 8837 Feb 07 17:00 Info Kernel-Power 1 System resume 8836 Feb 07 12:33 Info DHCP 1024 Lease renewed 8835 Feb 07 11:18 Warn Time-Service 134 Time skew 8834 Feb 06 23:45 Info BITS 59 Transfer done ↑ filter keeps these: | Where-Object { $_.EntryType -eq 'Error' } Dimmed rows are filtered out. Bright red rows pass the test.

Initial Configuration: Checklist

After installing Windows Server, complete these essential configuration tasks:

  1. Set Computer Name, rename from default (WIN-XXXXX)
  2. Configure Network, static IP for servers, DNS settings
  3. Windows Update, apply latest security patches
  4. Time Zone, critical for AD and logging
  5. Remote Desktop, enable for remote management
  6. Windows Firewall, configure for required services
  7. Join Domain, connect to Active Directory
Post-install configuration checklist1. Set Computer Name, rename from WIN-XXXXX2. Configure Network, Static IP + DNS3. Windows Update, apply security patches4. Time Zone, critical for AD & logging5. Remote Desktop + Firewall rules6. Join Domain, connect to Active DirectoryEach item maps to a PowerShell command

Rename Server & Assign Static IP

Every server starts with a random default name and DHCP. Rename it, then pin it to a static IP so other machines can always find it.

# Rename this server and reboot to apply PS C:\> Rename-Computer -NewName "DC01" -Restart
# Assign a static IP, subnet, and gateway to the Ethernet adapter PS C:\> New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.10 -PrefixLength 24 -DefaultGateway 192.168.1.1
# Output: IPAddress InterfaceAlias PrefixLength DefaultGateway 192.168.1.10 Ethernet 24 192.168.1.1
What each part of the IP command does PS> New-NetIPAddress -InterfaceAlias "Ethernet" -IPAddress 192.168.1.10 -PrefixLength 24 -DefaultGateway 192.168.1.1 1 New-NetIPAddress creates a new IP binding on a network adapter 2 -InterfaceAlias "Ethernet" which network adapter to configure (run Get-NetAdapter to see the names on this server) 3 -IPAddress 192.168.1.10 the address itself — must be unique on this subnet 4 -PrefixLength 24 subnet mask length 24 means 255.255.255.0 — first 24 bits identify the network 5 -DefaultGateway 192.168.1.1 the router — how packets reach networks outside this subnet → Server now sits at a fixed address; other machines can find it reliably

Configure DNS

Without correct DNS, the server cannot resolve domain names or find domain controllers for authentication. Point it at your local DC plus a public fallback.

# Set the Ethernet adapter's DNS to local DC + public fallback PS C:\> Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 192.168.1.10,8.8.8.8
Lab Preview: In Lab 1 you'll run these three commands (rename, static IP, DNS) to bring a freshly-installed server into the corp.local domain.
What each part of the DNS command does PS> Set-DnsClientServerAddress -InterfaceAlias "Ethernet" -ServerAddresses 192.168.1.10,8.8.8.8 1 Set-DnsClientServerAddress tells this server which DNS resolver(s) to ask for name lookups 2 -InterfaceAlias "Ethernet" which network adapter to configure (same parameter as the IP command) 3 -ServerAddresses 192.168.1.10,8.8.8.8 list of DNS servers in priority order — primary first, fallback after What those two addresses do, in order: Server "who is dc02.corp.local?" 1st try 192.168.1.10 your local DC knows corp.local domain names fallback if no answer → 8.8.8.8 Google's public DNS internet name lookups (microsoft.com, etc.) Order matters — primary tried first; fallback only used if the primary fails to answer.

Remote Management Options

In production, you rarely sit at a server console. Four primary remote-management tools, each with a use case:

ToolUse CaseProtocol
Remote Desktop (RDP)Full GUI accessTCP 3389
PowerShell RemotingCommand-line administrationWinRM (5985/5986)
Server ManagerMulti-server GUI managementWinRM
Windows Admin CenterModern web-based managementHTTPS

Protocols: RDP streams screen/keyboard. WinRM carries PowerShell over web messages (5985 HTTP / 5986 HTTPS). HTTPS = encrypted web.

Four remote management toolsRDPFull GUIPSRemotingPS C:\>Enter-PSSession_CLI adminServer MgrMulti-server GUIWin Admin Ctrhttps://Web-based3389WinRM 5985WinRMHTTPS 443Production admins rarely sit at server consoles.Each tool has its niche, the protocol differs.

Enable PSRemoting & Connect

PowerShell Remoting must be enabled on the target first, then you can open an interactive session that gives you a live prompt on the remote server.

# Enable WinRM and configure the firewall PS C:\> Enable-PSRemoting -Force
# Open an interactive PowerShell session on SERVER01 PS C:\> Enter-PSSession -ComputerName SERVER01
# Prompt changes to show you're remote: [SERVER01]: PS C:\Users\Administrator\Documents>
PSRemoting in two commands 1 Enable-PSRemoting -Force runs once on the target server: starts the WinRM service + opens the firewall -Force skips the confirmation prompts (useful in scripts) 2 Enter-PSSession -ComputerName SERVER01 opens an interactive shell on the remote machine — your prompt becomes [SERVER01]: PS> -ComputerName = the target's hostname or IP (the machine you just enabled PSRemoting on) The round trip — what travels between them Your machine PS C:\> you type a command in the remote session send via WinRM port 5985 (or 5986 HTTPS) output returned SERVER01 (the target) WinRM listens · runs the command PSRemoting enabled in step 1 = this side is ready WinRM = Windows Remote Management, Microsoft's web-service protocol for remote command execution. PSSession = a persistent connection that holds state (variables, location) while you work. → Type Exit-PSSession to close and return to your local prompt.

Fan-Out with Invoke-Command

Fan-out is admin slang for "one command, many targets, all at once." Invoke-Command is the cmdlet that does it — it ships a script block to multiple servers and runs it on all of them in parallel.

# Run Get-Service on DC01 and DC02 simultaneously PS C:\> Invoke-Command -ComputerName DC01,DC02 -ScriptBlock { Get-Service }
# Output (PSComputerName tags each result so you know which machine returned it): Status Name DisplayName PSComputerName Running W32Time Windows Time DC01 Running DNS DNS Server DC01 Running W32Time Windows Time DC02
What each part of the fan-out command does PS> Invoke-Command -ComputerName DC01,DC02,FS01 -ScriptBlock { Get-Service } 1 Invoke-Command ships your code to one-or-more remote machines and runs it there, returning results 2 -ComputerName DC01,DC02,FS01 the list of target machines (comma-separated) — all run the script in parallel 3 -ScriptBlock { Get-Service } the code to run on each target — anything inside the { } braces The fan-out — one command, three targets, in parallel Your machine Invoke-Command DC01 → Get-Service DC02 → Get-Service FS01 → Get-Service

Windows Admin Center

Windows Admin Center (WAC) is Microsoft's browser-based gateway: install it on one machine, manage every server from one browser tab.

Key Features

  • Single pane of glass — every server, cluster, hyper-converged host in one UI
  • Azure integration — Backup, Site Recovery, Monitor
  • Role-based access — delegate without giving domain-admin rights
  • No agent — uses the WinRM you enabled on slide 21
AZ-800: Heavily featured. Know gateway vs desktop mode.
Windows Admin Center, browser UIhttps://wac.corp.local_ □ ✕ServersDC01DC02FS01ToolsRoles & featuresServicesUpdatesDC01● OnlineCPURAMServices 142running    Errors 0Last patched: 2 d agoRecent activity10:15, Service started: Windows Update09:58, System boot complete

Server Core: sconfig

Server Core has no GUI. When you log in, you get a bare command prompt. sconfig is the menu-driven Server Configuration tool for common setup tasks.

# Launch the menu-driven Server Configuration tool C:\> sconfig
# Menu shown: Server Configuration 1) Domain/Workgroup: Workgroup: WORKGROUP 2) Computer Name: WIN-A83KD92MN4P 4) Configure Remote Management: Enabled 7) Remote Desktop: Disabled 8) Network Settings
Server Core's sconfig menuServer Core, sconfig.cmd═══════════════════════════════════════Server Configuration═══════════════════════════════════════1) Domain/Workgroup: Workgroup: WORKGROUP2) Computer Name: WIN-A83K...4) Configure Remote Mgmt: Enabled7) Remote Desktop: Disabled8) Network Settings12) Log off userEnter number to select an option: _

PowerShell on Server Core

PowerShell is your primary tool on Server Core. Switch from the basic prompt into PowerShell, then list available roles and features.

# Switch from the basic command prompt into PowerShell C:\> powershell
# List all roles and features with their install status PS C:\> Get-WindowsFeature
# Output (subset): Display Name Name State [ ] AD Domain Services AD-Domain-Services Avail [ ] DNS Server DNS Avail [X] File & Storage Svcs FileAndStorage-Svcs Inst
Reading the Get-WindowsFeature output Server Core terminal (PowerShell) PS C:\> Get-WindowsFeature Display Name Name Install State ─────────── ──── ───────────── [ ] AD Domain Services AD-Domain-Services Available [ ] DNS Server DNS Available [X] File & Storage Services FileAndStorage-Svcs Installed [X] Windows Defender Windows-Defender Installed What each column means 1 [ ] / [X] checkbox — X means installed, blank means available but not installed 2 Display Name the friendly, human-readable name (used in docs and GUI) 3 Name the programmatic name — what you pass to Install-WindowsFeature e.g. Install-WindowsFeature AD-Domain-Services installs Active Directory

sconfig Menu Reference

The sconfig menu organizes common Server Core configuration into numbered options:

  • 1) Domain/Workgroup membership
  • 2) Computer name
  • 4) Remote management settings
  • 6) Windows Update settings
  • 7) Remote Desktop
  • 8) Network settings
Best Practice: Configure Server Core remotely with Windows Admin Center, PowerShell Remoting, or RSAT from another machine.
sconfig numbered menu1Domain / Workgroup membership2Computer name4Configure remote management6Windows Update settings7Remote Desktop8Network settingsType a number, press Enter, minimal-friction config

Module Summary — what you're carrying forward

You finish this module as a junior admin with the foundation block in place.

You can now do

  • Install Windows Server, pick edition + install mode
  • Bring a fresh server to production-ready (name, IP, DNS, firewall)
  • Read and write a PowerShell command (verb-noun, pipeline, filter)
  • Manage a server remotely (PSRemoting, WAC, RDP)

In your toolkit

  • Server Manager · Get-Service / Process / EventLog
  • Pipeline · Where-Object · Sort-Object
  • Enable-PSRemoting · Enter-PSSession · sconfig
Module 1 takeawaysEditionsStd vs DCInstallGUI vs CoreServer MgrDashboardPowerShellVerb-NounPipeline| Where {…}Initial ConfigName + IP + DNSRemote ToolsRDP + PSRemoteServer Coresconfig + PSReady for GUI Lab → PowerShell Lab → Quiz

What's next — labs, quiz, then m02

Up next: m02 deepens the foundation

m02 walks you through Active Directory: domain controllers, forests, organizational units, users, groups, and authentication. The PowerShell foundations you just laid get a whole new module's worth of AD-specific cmdlets (Get-ADUser, New-ADOrganizationalUnit, …) layered on top. Same pipeline, deeper toolkit.

Before m02, lock in m01 with

  • GUI Lab: Walk through Server Manager hands-on
  • PowerShell Lab: Run the cmdlets yourself in a fresh shell
  • Module Quiz: Confirm the concepts stuck
Three checkpoints, then onward 1. GUI LabServer Manager hands-on, point + click confidence 2. PowerShell LabVerb-noun cmdlets in a real shell, build muscle memory 3. Module QuizConfirm the concepts stuck (server-graded) → then m02: Active Directory