Configurations/Windows10/VMValidate.test.ps1
#requires -version 5.1 #test if VM setup is complete # Uncomment the Write-Host lines for development and troubleshooting $LabData = Import-PowerShellDataFile -Path $PSScriptRoot\VMConfigurationData.psd1 if (-Not $LabData) { Write-Warning "Failed to get lab data." #bail out Return } $Secure = ConvertTo-SecureString -String $labdata.allnodes.labpassword -AsPlainText -Force $cred = New-Object -typename Pscredential -ArgumentList Administrator, $secure $Computername = $labdata.allnodes[1].nodename $IP = $labdata.allnodes[1].IPAddress $DNSAddress = $LabData.allnodes[0].DnsServerAddress Describe $Computername { $cl = New-PSSession -VMName $Computername -Credential $cred -ErrorAction SilentlyContinue It "[$Computername] Should have an IP address of $IP" { $i = Invoke-command -ScriptBlock { Get-NetIPAddress -interfacealias 'Ethernet' -AddressFamily IPv4} -session $cl $i.ipv4Address | should be $IP } $dns = Invoke-Command {Get-DnsClientServerAddress -InterfaceAlias ethernet -AddressFamily IPv4} -session $cl It "[$Computername] Should have a DNS server configuration of $DNSAddress" { $dns.ServerAddresses -contains $DNSAddress | Should Be "True" } It "[$Computername] Should belong to the LAB Workgroup" { $wg = Invoke-Command {(Get-CimInstance -ClassName win32_computersystem)} -session $cl $wg.Workgroup | Should Be "Lab" } It "[$Computername] Should have a local admin account for $env:username" { $local = Invoke-Command {get-ciminstance -ClassName win32_useraccount -filter "Name='$using:env:username'"} -session $cl $local.Accounttype | Should be 512 $local.Name | Should Be $env:username # Write-Host ($local | Out-string) -ForegroundColor cyan } It "[$Computername] Should have 2 members in Administrators" { $admins = Invoke-Command { get-ciminstance -ClassName win32_group -filter "name='Administrators'" | Get-CimAssociatedInstance -ResultClassName win32_useraccount } -session $cl $Admins.Count | Should be 2 # Write-Host ($admins | Out-string) -ForegroundColor cyan } It "[$Computername] Should have RSAT installed" { $pkg = Invoke-Command {Get-WindowsCapability -online -name *rsat*} -session $cl # write-host ($pkg | Select-object Name,Displayname,State | format-list | Out-String) -ForegroundColor cyan $pkg.State| should match "Installed" } } #client if ($cl) { $cl | Remove-PSSession } |