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

Odesílání emailu pomocí PowerShellu

S moderní autentizací na straně emailových serverů dokážeme i nadále PowerShellem odesílat emaily. Následující kód využívá SMTP Office 365 pro Evropu k odeslání emailu. Kód je určen k uložení ve formátu ps1 a volání s patřičnými parametry. Odesílání emailů tak může zajíst např. zasílání výpisu z logů, nebo odbavovat požadavky v rámci naší serverové aplikace. Po úpravě SMTP serveru zvládne spolupracovat i s jinými emailovými službami.
Zdrojový kód skriptu:


param(
[Parameter(Mandatory=$true, ValueFromPipeline=$true)][string] $userName,
[Parameter(Mandatory=$true, ValueFromPipeline=$true)][string] $password,
[Parameter(Mandatory=$true, ValueFromPipeline=$true)][string[]] $komu,
[Parameter(Mandatory=$true, ValueFromPipeline=$true)][string] $predmet,
[Parameter(Mandatory=$true, ValueFromPipeline=$true)][string] $telo,
[Parameter(Mandatory=$true, ValueFromPipeline=$true)][switch] $teloHTML,
[Parameter(Mandatory=$true, ValueFromPipeline=$true)][switch] $priloha,
[Parameter(Mandatory=$false, ValueFromPipeline=$true)][string] $cestaKpriloze

)
[SecureString]$securepassword = $password | ConvertTo-SecureString -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList $username, $securepassword
$server = „smtp.office365.com“
$port = 587
if($teloHTML -and $priloha)
{
Send-MailMessage -SmtpServer $server -Port $port -UseSsl -From $userName -To $komu -Subject $predmet -Body $telo -BodyAsHtml -Attachments $cestaKpriloze -Credential $credential
}
elseif($teloHTML)
{
Send-MailMessage -SmtpServer $server -Port $port -UseSsl -From $userName -To $komu -Subject $predmet -Body $telo -BodyAsHtml -Credential $credential
}
elseif($priloha)
{
Send-MailMessage -SmtpServer $server -Port $port -UseSsl -From $userName -To $komu -Subject $predmet -Body $telo -Attachments $cestaKpriloze -Credential $credential
}
else
{
Send-MailMessage -SmtpServer smtp.office365.com -Port 587 -UseSsl -From $userName -To $komu -Subject $predmet -Body $telo -Credential $credential
}

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

Generování hesel v PowerShellu

Každý správce, který se stará o nějaký identitní systém, potřebuje vymýšlet bezpečná jednorázová hesla. K tomu mu může sloužit například následující kousek PowerShell kódu:

$delka = 10
$specZnaku = 2
Add-Type -AssemblyName System.Web
[System.Web.Security.Membership]::GeneratePassword($delka,$specZnaku)

Verze, která nevyužívá volání .NET:

function Generate-Password
{
param
(
[int] $delka = 12,
[switch] $specZnak
)
$length = $delka
if($specZnak)
{
$charSet = ‚abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{]+-[*=@:)}$^%;(_!&#?>/|.‘.ToCharArray()
}
else
{
$charSet = ‚abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789‘.ToCharArray()
}
$rng = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
$bytes = New-Object byte
$rng.GetBytes($bytes)
$result = New-Object char
for ($i = 0 ; $i -lt $length ; $i++) {
$result[$i] = $charSet[$bytes[$i]%$charSet.Length]
}
return (-join $result)
}

Posted in: Windows server

Script pro zálohu AD

Jednou z možností, jak zálohovat AD nezávisle na zálohování serveru, nebo jak připravit kopii AD k analýze či tvorbě RODC, je nástroj ndsutil. Kroky k vytvoření média pro tvorbu nového řadiče (tedy i možnost obnovit AD do čisté instalace Windows serveru) lze automatizovat, aby se mohly vykonávat pravidelně.

Dávkový soubor pro příkazovou řádku (tedy .cmd) může vypadat např.:

md F:\Zaloha\IFM
ntdsutil "activate instance ntds" IFM "create full F:\Zaloha\IFM" q q
ntdsutil "activate instance ntds" IFM "create sysvol full F:\Zaloha\IFM\Sysvol" q q
Xcopy F:\Zaloha\IFM "E:\Shares\Scripts\IFM" /E /H /C /I /Y
rmdir /s /q "F:\Zaloha\IFM"

Pokus bychom chtěli, aby se nám zálohvalo AD pravidelně na nějaké místo v síti, či do adresáře, který bude synchronizován do cloudu, můžeme použít PowerShell a tvořit následovně:

$adresar = "F:\Zaloha\IFM"
New-Item -Path $adresar -Name (Get-Date).ToString("ddMMyyyy") -ItemType "directory"
$cesta = "$adresar\"+(Get-Date).ToString("ddMMyyyy")
ntdsutil "activate instance ntds" IFM "create full $cesta" q q
ntdsutil "activate instance ntds" IFM "create sysvol full $cesta\Sysvol" q q
Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server

Vypsání originálního produktového klíče Windows

V systému Windows není možné na pár kliknutí zobrazit původní produktorý klíč. V nastavení Windows je zobrazen v položce aktivace koncovka (posledních několik znaků) produktového klíče, pod kterým je daný systém aktivovaný.
Úplný produktový klíč jde zobrazit pomocí CIM rozhraní s využitím příkazové řádky.

1) Spustit příkazovou řádku jako správce
2) zadat příkaz: wmic path softwarelicensingservice get OA3xOriginalProductKey

Další variantou jsou aplikace pro zobrazování produktových klíčů, které jej dokáži vypsat z registru. Dané aplikace využívají VBS, který ve zjednodušené podobě může vypadat následovně:

Set WshShell = CreateObject(„WScript.Shell“)
MsgBox ConvertToKey(WshShell.RegRead(„HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId“))
Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = „BCDFGHJKMPQRTVWXY2346789“
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur \ 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 – i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = „-“ & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function

Posted in: Windows server

Synchronizace 2 složek

Microsoft SyncTool

SyncTool je jedním ze starších drobných nástrojů Microsoftu, který umožňuje provádět synchronizace 2 složek (jedna může být mapovaný síťový disk). Bohužel není možné, aby jednou stranou synchronizace byl cloud, na druhou stranu umí v grafické podobě provést synchronizaci obsahu složek, kterou si jinak mi správci skriptujem na nastavujeme pomocí plánovaných úloh.

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

Spuštění PowerShellu pod účtem operačního systému

V rámci balíčku nástrojů SysInternals od Microsoftu je k dispozici nástroj PSEXEC, který umožní spouštět aplikace pod účtem operačního systému. Nejspolehlivější a nejlepší využití je spustit si PowerShell, protože jeho pomocí mohu dělat cokoliv a spouštět cokoliv.
Příkaz bude mít tvar:
psexec -s -i powershell

Stažení a dokumentace PSXEC

Posted in: Windows server

Prověření hesel v AD

Tento článek bych rád věnoval problematice kontrole hesel, které využívají vaši uživatelé v rámci doménové sítě. Jednou věcí je vydefinovat politiku na složitost délku, dobu platnosti hesla a uzamykání stanic, což je naprostý základ každé domény a doporučuji toto nastavení definovat v Default Domain Policy.
Pokud je toto nastavení provedeno správně, značně ztěžuje slovníkový či brute-force útok na heslo uživatele, ale problém je v tom, že lokální AD na rozdíl od Azure AD neumí porovnávat hesla se známími uniklými hesly. Pomocí Azure AD Premuim lze při hybridním scénáři tuto funkcionalitu do lokálního AD nasadit, ale pojďmě se podívat na to, jak si podobný test provés bez cloudu.Tento manuální audit hesel by měli provádět pouze doménový správci, ostatně jsou jediní, kdo to může udělat legitimně. Test nemusíme, ani to nedoporučuji, provádět přímo na serveru Active Directory, co budeme potřebovat je počítač s Windows 10, naprosto ideálně počítač s klientskou verzí systému Windows odpovídající serverové verzi. Například pro Windows server 2012R2 to jsou 8.1, pro Windows server 2012 jsou to 8, pro Windows server 2016 a 2019 jsou to Window 10.Dále budeme potřebovat PowerShell modul od Michaela Grafnettera DSInternals, který leze instalovat normálně z PowerShell galery. Dokumentace je krom PowerShellu dostupná na GitHubu či webu.

Poslední potřebnou věcí jsou databáze uniklých hesel např. have i been pwned (NTLM Hash) nebo čistě textové. Ze stažených archivů exportujeme txt soubor s hesly.

Postup

  1. Ze záloíhy AD si obnovíme co nejnovější verzi ntds.dit a souboru SYSTEM (což je soubor registru ze složky: C:\Windows\System32\config)
  2. Spustíme PowerShell jako správce

V PowerShellu spustíme následující kód pro databázi NTLM Hashů hesel:

$ntdsPath = Read-Host -Prompt "Zadej cestu k ntds.dit"
$systempath = Read-Host -Prompt "Zadej cestu k souboru registru SYSTEM z DC"
$slovnik = Read-Host -Prompt "Zadej cestu k souboru slovníku NTLM hash"
$vystup = Read-Host -Prompt "Zadej umístění výstupního souboru txt"
Import-Module -Name DSInternals
$key = Get-BootKey -SystemHivePath $systempath
Get-ADDBAccount -All -DBPath $ntdsPath -BootKey $key | Test-PasswordQuality -WeakPasswordHashesFile $slovnik | Out-File $vystup -Encoding utf8

Pokud máme zdrojovou databázi (či vlastní list) v plaintextu, použijeme následující příkazy:

$ntdsPath = Read-Host -Prompt "Zadej cestu k ntds.dit"
$systempath = Read-Host -Prompt "Zadej cestu k souboru registru SYSTEM z DC"
$slovnik = Read-Host -Prompt "Zadej cestu k souboru slovníku NTLM hash"
$vystup = Read-Host -Prompt "Zadej umístění výstupního souboru txt"
Import-Module -Name DSInternals
$key = Get-BootKey -SystemHivePath $systempath
Get-ADDBAccount -All -DBPath $ntdsPath -BootKey $key | Test-PasswordQuality -WeakPasswordsFile $slovnik | Out-File $vystup -Encoding utf8

Nyní necháme proces proběhnout (trvá od jednotek minut do řádu hodin dle počtu účtů, velikosti databáze uniklých hesel, toho zda databáze obsahuje plaintextová hesla nebo rovnou hash a rychlosti disku). Po dokončení procesu máme ve výstupním souboru hotovou analýzu.

Posted in: Windows server

Storage migration services

V tomto článku se s Vám podělím o video, které je návodné a zároveň popisné pro Storage Migration Services. Tato služba je dostupná ve Windows serveru 2019 a 2022, grafické rozhraní obsatává Windows Admincenter.
Jde o službu pro migraci souborů a síťových disků mezi servery, nebo s možností cílového umístění v Azure tak, aby při migraci v rámci lokální sítě vše fungovalo a nebylo po dokončení poznat, že sdílené soubory jsou na jiném serveru.

Pod videem, které snad brzy doplním o český článek, se rovněž nachází řešení jednoho problému, na který jsem osobně při využití této funkce v produkci narazil.

Správci služby migrace úložiště: pokud se vám při ověřování přenosu po instalaci listopadové kumulativní aktualizace zobrazuje „Chyba HRESULT E_FAIL byla vrácena z volání komponenty COM“, máme řešení ve WAC:

  1. Nainstalujte si nejnovější nástroj SMS WAC (od 3.9.2021 dne 1.115). Automaticky se zobrazí ve zdroji WAC
  2. Ve fázi přenosu přejděte na krok „Upravit nastavení“.
  3. Povolit „Přepsat ověření přenosu“
  4. Pokračujte v převodu, aniž byste spustili „Ověřit“ nebo jej spustili a ignorovali chybu E_FAIL.
thumbnail image 1 of blog post titled SMS "HRESULT E_FAIL from COM component" workaround coming
Back to Top