Posted in: Windows server

Vnořená virtualizace v Hyper-V

Od Windows serveru 2016 je možné virtualizovat ve virtualizovaných strojích, což může pomoci nejen vývojářům, ale také v rámci firemního provozu, kdy je možné spustit technologii Hyper-V, či jinou virtualizační technologii ve virtuálních strojích. V dnešním příspěvku si ukážeme, jak takovou záležitost nakonfigurovat.Pro zapnutí vnořené virtualizace je potřeba udělat několik případných kroků.

  1. Virtuální stroj, který má mít zapnutou vnořenou virtualizaci, musí mít více jak 1 virtuální procesor
     
  2. Virtuální stroj, který má mít zapnutou vnořenou virtualizaci, musí mít vypnutou dynamickou paměť, tedy musí mít nastavenou staticky při startu přiřazenou paměť
     
  3. Virtuální stroj, který má mít zapnutou vnořenou virtualizaci, musí mít povolené falšování MAC adresy
     
  4. V PowerShellu, který běží v režimu správce, spustíme následující příkaz:
    Set-VMProcessor -VMName <Název virtuálního PC> -ExposeVirtualizationExtensions $true #Náve doplňujeme bez špičatých závorek a název se bere z Hyper-V konzole, nikoliv z běžícího systému
     
  5. V PowerShellu, který běží v režimu správce, spustíme pro kontrolu výsledku následující příkaz:
    Get-VMProcessor -VMName <Název virtuálního PC> | FL *
Posted in: Windows server

Jak přenést či zálohovat role a funkce Windows Serveru?

Dnes si představíme malý PowerShell skript, který Vám pomůže přenést všechny role a funkce z jednoho serveru na druhý. Na takto připraveném serveru je možné následně využít nástrojů pro migraci serveru, které dokáže exportovat a importovat jednotlivé konfigurace různých rolí a funkcí serveru. Základem ovšem zůstává mít instalované stejné role a funkce na starém i novém stroji a to jak vše provést na 2 spuštění sktriptu a přenesené jednoho TXT souboru si ukážeme. Nejprve je potřeba si uložit následující skript:

Function MigraceRoliFunkci
{
    Param(
        [Parameter(Mandatory=$true)]
        [String]$soubor = "C:\Users\Public\features.txt",
        [Parameter(Mandatory=$false)]
        [Switch]$Import
    )
    if($Import)
    {
        $file = Get-Content $soubor;
    	$radek = ($file.Count) - 3;
    	$role = Get-Content E:\funkce.txt -Tail $radek
        foreach ($f in $role)
        {
            Install-WindowsFeature -Name $f -IncludeManagementTools
        }
        Write-Host "Restartujte server co nejdříve!"
	}

     else

     {

	Get-WindowsFeature | Where-Object {$_. installstate -eq "installed"} | select name | Out-File -FilePath $soubor
        
	Write-Host "Vyzvednete si vygenerovany soubor pro import."
    
     }

}

Nyní jej můžeme spustit na starém serveru a následně zavolat funkci například takto:
MigraceRoliFunkci -soubor E:\funkce.txt
Nyní skriprt spustí export seznamu rolí a funkcí za našeho starého serveru na náš disk E do souboru funkce.txt.
Disk E přeneseme na nový server, kde pro zjednodušení bude mít také písmeno E, spustíme náš skript a opět budeme volat funkci:
MigraceRoliFunkci -soubor E:\funkce.txt -Import
Nyní naše funkce provede instalaci všech rolí a funkcí, které nalezne v souboru funkce.csv. Po dokončení instalace máme server připraven k importu nastavení, ale o tom až někdy jindy.

Posted in: Windows server

Jak udržet ovladače a soubory kernel-mode v RAM

Pokud se Vám stává, že Váš server havaruje opakovaně z důvodu chyby paměťové stránky, nebo paměťové stránky kernel-modu doporučuji zkontrolovat následující registr:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Kde je klíč DisablePagingExecutive, který řeší, zda smí být paměťové stránky příslušející kernel-modu nebo ovladačům odloženy na disk v případě potřeby.
Pokud máte v klíči DisablePagingExecutive: 0, pak smí být data odložena nadisk.
pokud máte v klíči DisablePagingExecutive: 1, pak jsou data za všech okolností držena v paměti RAM.

Posted in: Windows 10, Windows 11, Windows server

PowerShell script pro monitoring záloh a obnovu ze zálohy

Write-Host „Práce se zálohou serveru“;
Write-Host „“;
Write-Host „Menu:“ -ForegroundColor Green;
$volba;
Write-Host „1: Aktuální stav běžící zálohy“;
Write-Host „2: Výpis dostupných záloh“;
Write-Host „3: Výpis položek obsažených v záloze“;
Write-Host „4: Obnova souborů a složek do původního umístění“;
Write-Host „5: Obnova souborů a složek do vlastního umístění“;
Write-Host „6: Obnova celé jednotky“;
Write-Host „7: Obnova registru“;
Write-Host „8: Obnova systémového stavu“;
$volba = Read-Host -Prompt „Zadejte číslo své volby“;
function status()
{
Write-Host „Vypisuji stav běžící zálohy“ -ForegroundColor Green;
wbadmin get status
Write-Host „Stav záloh za poseldní týden“ -ForegroundColor Green;
Get-WBJob -Previous 7
}
function dostupne()
{
$cil = Read-Host -Prompt „Zadej cíl zálohy (např.: H:): „;
Write-Host „Vypisuji dostupné zálohy“ -ForegroundColor Green;
wbadmin get versions -backupTarget:$cil
}
function polozky()
{
$ID = Read-Host -Prompt „Zadej ID zálohy (např.: 01/27/2021-15:01): „;
Write-Host „Vypisuji položky zálohy“ -ForegroundColor Green;
wbadmin get items -version:$ID;
}
function souboryP()
{
Write-Host „Obnova soborů a složek“ -ForegroundColor Green;
$slozka = Read-Host -Prompt „Obnovuješ složku? (A/N): „;
$ID = Read-Host -Prompt „Zadej ID zálohy (např.: 01/27/2021-15:01): „;
$polozka = Read-Host -Prompt „Zadej položku k obnově (např.: E\Fotoalbum\MTZ)“;
if($slozka -eq „A“ -or $slozka -eq „a“)
{
wbadmin start recovery -version:$ID -itemType:File -items:$polozka -recursive;
}
else
{
wbadmin start recovery -version:$ID -itemType:File -items:$polozka;
}
}
function souboryS()
{
Write-Host „Obnova soborů a složek“ -ForegroundColor Green;
$slozka = Read-Host -Prompt „Obnovuješ složku? (A/N): „;
$ID = Read-Host -Prompt „Zadej ID zálohy (např.: 01/27/2021-15:01): „;
$polozka = Read-Host -Prompt „Zadej položku k obnově (např.: E\Fotoalbum\MTZ)“;
$cil = Read-Host -Prompt „Zadej cíl obnovy (např.: H\Foto\mtz)“
if($slozka -eq „A“ -or $slozka -eq „a“)
{
wbadmin start recovery -version:$ID -itemType:File -items:$polozka -recursive -recoverytarget:$cil;
}
else
{
wbadmin start recovery -version:$ID -itemType:File -items:$polozka -recoverytarget:$cil;
}
}
function jednotka()
{
Write-Host „Obnova jednotky“ -ForegroundColor Green;
$ID = Read-Host -Prompt „Zadej ID zálohy (např.: 01/27/2021-15:01): „;
$jednotka = Read-Host -Prompt „Zadej identifikátor jednotky (např.: \\?\Volume{cc566d14-44a0-11d9-9d93-806e6f6e6963}\“
wbadmin start recovery -version:$ID -itemType:Volume -items:$jednotka;
}
function registr()
{
Write-Host „Obnova registru přibyde v novější verzi“ -ForegroundColor red;
}
function system()
{
Write-Host „Obnova stavu systému“ -ForegroundColor Green;
$ID = Read-Host -Prompt „Zadej ID zálohy (např.: 01/27/2021-15:01): „;
wbadmin start systemstaterecovery -version:$ID;
}
switch($volba)
{
1{status}
2{dostupne}
3{polozky}
4{souboryP}
5{souboryS}
6{jednotka}
7{registr}
8{system}
default{Write-Host „Chybně zadaná volba, spusť skript znovu!“-ForegroundColor Red}
}

Posted in: Windows server

Jak povolit WinRM prostřednictvím zásad skupiny

Tato demonstrace používá systém Windows Server 2012R2 jako řadič domény a Windows 10 jako cílený klientský počítač. Ve scénáři je klientský počítač připojen k doméně s názvem asaputra.com a je umístěn pod cestu OU „WorkstationsW10“. Zásadou může být nový objekt zásad skupiny nebo použití stávajícího objektu zásad skupiny v konzole pro správu zásad skupiny v řadiči domény. V tomto příkladu je vytvořen nový objekt zásad skupiny s názvem „Globální správa“
Kliknutím pravým tlačítkem myši otevřete okno editoru objektu zásady a zvolte „Upravit“. První věc, kterou je třeba udělat, je říct cílovému počítači, aby povolil službu WinRM. Přejděte do Konfigurace počítače> Předvolby> Nastavení ovládacího panelu> Služby, potom klikněte pravým tlačítkem na prázdné místo a zvolte Nový> Servis
Klepnutím na tlačítko OK uložíte parametry, ale zatím nezavírejte editor zásad.
Další, stále na stejném objektu politiky, dalšívěc, kterou je třeba nakonfigurovat, je seznam IP adres, které mají povolen přístup ke vzdálené správě v cílovém počítači. Přejděte na Konfigurace počítače> Zásady> Šablony pro správu> Součásti systému Windows> Vzdálená správa systému Windows (WinRM)> Služby WinRM. Poté dvakrát klikněte na „Povolit vzdálenou správu serveru pomocí WinRM“ a změňte nastavení následovně:
Z hlediska bezpečnosti je nejlepší omezit rozsah adres IP co nejméně. Pro tento příklad je však v poli uvedena hvězdička (*), která umožňuje vzdálený přístup z libovolné adresy IP. Klepnutím na tlačítko OK uložte nastavení a znovu nezavírejte editor zásad.
Poslední věcí, kterou je třeba udělat, je vytvoření nového pravidlapro Firewall na cílovém klientském počítači. Přejděte do Konfigurace počítače> Zásady> Nastavení zabezpečení> Brána firewall systému Windows a pokročilé zabezpečení> Brána firewall systému Windows a pokročilé zabezpečení a potom klepněte pravým tlačítkem myši na Pravidla příchozí> Nové pravidlo

Vyberte Vzdálenou správu systému Windows z předdefinované sady pravidel, jak je uvedeno níže, klepněte na tlačítko Další
Zaškrtněte políčko pouze v profilu domény a soukromí, klikněte na tlačítko Další.Nastavte akci na Povolit připojení.

Klepnutím na tlačítko Dokončit uložte konfiguraci a nyní můžete okno editoru zásad zavřít.
Protože se jedná o počítačovou zásadu, je třeba ji použít na OU, kde je umístěn počítač. Stejně jako v tomto scénáři, jak to vypadá, když je zásada použita:

Po aktualizaci zásad skupiny se všechna tato 3 nakonfigurovaná nastavení projeví v klientském počítači. K ověření nám poslouží příkaz: Test-WsMan [Target Hostname / IP address]
například: Test-WsMan ucpc01
příklad 2: Test-WsMan 192.168.1.64

Pokud příkaz skončí chybou, je potřeba zkontrolovat, zda běží služba WinRM a zda je povolena na FireWall. Individuální řešením na daném PC pak může být příkaz: winrm qc -q

Posted in: Windows server

Změna pozadí plochy Windows pomocí zásad skupiny

V konzole Správa zásad skupiny rozbalte doménovou strukturu a doménu, klikneme pravým tlačítkem na objekty zásad skupiny a vyberte „Nový“
Zadáme název nového objektu politiky. V tomto příkladu je název zásady „Zásady tapety“
Nově vytvořená zásada bude uvedena v seznamu objektů Zásady skupiny. Klikneme na něj pravým tlačítkem a vybereme „Upravit“
Zobrazí se okno editoru. V levém podokně přejděte na Konfigurace uživatele> Šablony pro správu> Plocha> Plocha. V pravém podokně poklepeme na nastavení Tapety na plochu.
Změníme možnost na Povoleno a poté zadejte umístění tapety a styl tapety. V tomto příkladu určujeme místní cestu, protože obrazový soubor na pozadí tapety plochy je uložen na místní jednotce serveru Domain Controller a styl tapety, který jsme použili, je „Výplň“.
Po konfiguraci klikneme na OK a zavřete okno editoru.
V okně konzoly Správa zásad skupiny klikneme pravým tlačítkem na OU „Uzivatele“ a vybereme „Propojit existující GPO“
Vybereme zásady tapety a klikněte na OK.
Vše potvrdíme OK a nyní se s následující aktualizací zásad (restart déle jak 4 hodiny po spuštění, první přihlášení uživatele na daný PC v daném dni, čí příkaze gpupdate/force) nastaví uživatelům zařazným do OU „Uživatelé“ nová tapeta.

Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server, Základy PowerShellu

Kontrola spuštění PoweShellu v řežimu správce

Při správě serverů není nic vzácného, že PowerShell je potřeba spustit v privilegovaném módu. Určitě všichni správci znají fintu pravého tlačítka na skript a volby Run with PowerShell, ale jak ve sktirptu zkontrolovat, zda byl spuštěn s oprávněním správce? Zkuste následující větvení, které místo pouhých výpisů rolí obohaťte o svůj kód.

if((whoami /priv /fo csv | convertfrom-csv | select "Privilege Name")."Privilege Name" -contains "SeImpersonatePrivilege")
{"admin"}
else
{"user"}

Tento skript využívá toho, že účet správce má dva módy, jeden privilegovaný (obsahuje SID skupiuny Administrators) a jeden běžný (neobsahuje SID skupiny Administrators). Když i správce spustí aplikaci pouhým poklikáním, neběží v privilegovaném módu (až na vyjímky jako je Plánovač, Prohlížeč událostí apod.). Také PowerShell jde pustit v obou režimech a pokud výslovně správce nespustí PowerShell v řežimu správce, má stejná oprávnění jako běžný uživatel. Zobrazit jednotlivá oprávnění daného režimu PowerShellu jde příkazem:

whoami /priv

Více se pak dočtete v dokumentaci Microsoftru v sekci věnované uživatelským účtům.

Posted in: Windows server

Ruční řízení synchronizace Azure AD Connect

Dnes Vám ukáži primitivní skript, kterým je možné zjisti stav synchronizace a případně ručně spustit synchronizaci AD s Azure AD.

<#
    Skript vypíše stav synchronizace Azure ADconnect,
    provede pravidelnou nebo celou synchronizaci.
    Skript musí běžet na PC, kde je instalován Azure ADconnect.
#>
$volba = 0
Write-Host "volba 1: Zjištěnís tavu synchronizace"
Write-Host "volba 2: Spustí synchrnizaci"
Write-Host "volba 3: Spustí úplnou (iniciální) synchronizaci"
switch($volba)
{
    1{Get-ADSyncScheduler}
    2{Start-ADSyncSyncCycle -PolicyType Delta}
    3{Start-ADSyncSyncCycle -PolicyType Initial}
}
Posted in: Windows server

Výpis PC, která si rok neměnila heslo

Jak všichni správci AD ví, i počítače dodržují ze zdvořilosti politiku na změnu hesla. Reálně by to ovšem dělat nemusely, protože heslo počítače má 128 míst, takže jeho prolomení se tím značně komplikuje. Vyjímaje doménových řadičů si ovšem počítače mění heslo v souladu s default domain policy.  Pokud si PC např. rok nezměnil heslo, patrně je vyřazený, nebo opravdu nebyl v dosahu AD. Následující skript vyhledá taková PC a dokáže je smazat, ale musíte si dát pozor na doménové řadiče.

$Date = ((Get-Date).AddDays(-365))
$DC2 = Read-host -promt "Zadejte druhý řád názvu domény: "
$DC1 = Read-host -promt "Zadejte první řád názvu domény: "
#Počítače s více jak ro neměněným heslem​
Get-ADComputer -Filter 'PasswordLastSet -le $Date' -SearchBase "CN=Computers,DC= $DC2,DC=$DC1" -Properties PasswordLastSet | where Enabled -eq $true | FT Name,PasswordLastSet ​
#zakáže PC s rok neměněnýn heslem​
$zakazat = 0​
$zakazat = Read-Host -Prompt "Pro zakázání všech vypsaných účtů zvolte zadejte 1 jinak 0: "​
if($zakazat -eq 1)​
{​
    Disable-ADAccount -Identity (Get-ADComputer -Filter 'PasswordLastSet -le $Date' -Properties PasswordLastSet | where Enabled -eq $true)​
    Write-Host "Počítače byly zakázány"​
}​
else​
{​
    Write-Host "Žádný úet nebyl zakázán"​
}
Posted in: Windows server

Centrální zastavení / spuštění služby Windows Update

Všichni jsme se jako admini setkali se situací, kdy potřebujeme rychle zastavit aktulizace Windows v celé síti, ať z důvodu chybné aktualizace, či z jiného důvodu.
Dnes Vám ukáži, jak aktualizace vypnout pomocí PowerShellu, ale nezapomeňme, že je nutné Windows update po nezbytné době opět zapnout, protože podporované jsou jen plně aktualizované systémy 😉

<#
    
	Skript zastaví službu Windows Update na všech PC v doméně.
    
	Autor nenese žádnou odpovědnost za případné škody, 
	uživatel je povinen před spuštěním se seznámit se skriptem!

    
	Požadavky:
    
	- PowerShell verze 5 a novější
    
	- Admin oprávnění pro všechna PC
    
	- ExcutionPolicy set to bypass

    
	Petrásek Jan
    
	©2020

#>

Invoke-Command -ComputerName (Get-ADComputer -Filter * | select DNSHostName).DNSHostName -ScriptBlock {

	net stop wuauserv;
    sc.exe config wuauserv start=disabled

}

Nyní si uvedeme druhý skript, který aktualizace opět zapne:

<#
    
	Skript zastaví službu Windows Update na všech PC v doméně.
    
	Autor nenese žádnou odpovědnost za případné škody, 
	uživatel je povinen před spuštěním se seznámit se skriptem!

    
	Požadavky:
    
	- PowerShell verze 5 a novější
    
	- Admin oprávnění pro všechna PC
    
	- ExcutionPolicy set to bypass

    
	Petrásek Jan
    
	©2020

#>

Invoke-Command -ComputerName (Get-ADComputer -Filter * -SearchBase "CN=Computers,DC=arpida,DC=local" | select DNSHostName).DNSHostName -ScriptBlock {
	net start wuauserv;
    sc.exe config wuauserv start=auto

}
Back to Top