Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server

Přidání PC do domény pomocí PowerShellu

Někdy se může hodit naskriptovat si přidání PC do domény. Může se jednat o to, že tuto akci z nějakého důvodu, např. nasazení LAPS, budeme chtít provést jako poslední akci z MDT task sekvenci. Nejsnazší je pak tuto akci provést jako spuštění PowerShell skriptu, který bude využívat nějaký servisní účet k této akci určený.

Problematiku práce s heslem v PowerShellu nechám na jiné téma, přestavte si, že máme přihlašovací údaje uložené někde v registru instalačního serveru. V ukázce níže jsou údaje součástí kódu, což není z pohledu bezpečnosti správně, ale naplnění jednotlivých proměnných může být rozličným způsobem.

$u = "domena\mdt" 
$d = "domena.local"
$p = ConvertTo-SecureString "5EiCJnRrgNrdQC3ZyEZauWg4PGPtMoIM10GC6qF618esuNKVva" -Force
$c = New-Object System.Management.Automation.PSCredential $u, $p
Add-Computer -DomainName $d -Credential $c

Výše uvedený kód vyžaduje, aby PowerShell běžel ve Full Language mode. Proměnná $c opisuje, co se na pozadí stane, když zapíšeme:

$c = Get-Credential

Pokud využijeme konstrukci Get-Credential, tak se nám zobrazí okno pro zadání loginu a hesla.

Posted in: Windows 10, Windows 11, Windows 8 a 8.1

Úprava času pro zadání hesla do Windows

Jak jistě víte, doba, za kterou musíte stihnout zadat přihlašovací údaje do systému Windows je omezena, takže se vám opět ukáže přihlašovací obrazovka, i když jste velmi pomalými úhozy nepřestali psát a můžete začít znovu. Výchozí nastavení je vyladěno velmi dobře, proto většina lidí tento stav nikdy nezažije, pokud nepřeruší úkon přihlašování se.

Problém jsou lidé, kteří mají různé tělesné postižení, jež jim ztěžuje práci s počítačem a např. psaní na klávesnici je pro ně opravdu velmi náročnou a hodně pomalou činností. Pro tyto lidi je zde primárně Windows Hello, které jim umožní přihlásit se obličejem, otiskem prstu či krátkým pinem, ale co dělat, když z nějakého důvodu není technologie k dispozici?

Pomocí registrového klíče HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI
je možné nastavit v milisekundách dobu pro zadání hesla. Konkrétně pomocí hodnoty IdleTimeOut typu DWORD, kam se zadává čas v milisekundách, po který má být možné vyplňovat přihlašovací údaje.

Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server

Jak vytvořit kopii disku bez koše a stínových kopií?

Situaci, kdy máte starý disk, který je už plný nebo nefunguje, a potřebuje z něj všechna data zkopírovat na nový, už zažil asi každý. Většina uživatelů zvolí možnost vybrat vše a kopírovat pomocí průzkumníka souborů, ale nabídnu alternativní cestu příkazem robocopy.

Pokud budu chtít na nový disk zapsat vše, včetně obsahu koše, stínových kopií a systémových souborů se zachováním oprávnění, bude příkaz vypadat takto:

Robocopy.exe H:\ J:\ /MIR /COPYALL

Pokud budeme chtít vynechat koš a složku System volume information, tak využijeme příkazu:

Robocopy.exe H:\ J:\ /MIR /COPYALL /XJD /XD 'H:\$RECYCLE.BIN'

Výše uvedený příklad nebude zahrnovat spojovací body pro adresáře díky užití přepínače /XJD.

Je důležité si uvědomit, že se nejedná o klon diskového oddílu nebo disku, ale pouze o souborový duplikát diskového oddílu se zachováním ACL pro jednotlivé složky a soubory.

Posted in: Windows 10, Windows 11, Windows server

Odinstalace programů PowerShellem

Nainstalovat program příkazovou řádkou, nebo pomocí PwerShellu, klidně i vzdáleně, není nic až tak těžkého. Pro msi balíčky máme msiexec a pro balíčky z MS Store máme rovněž integrované jednotné nástroje, horší je to s exe soubory, tam potřebujeme pokyny od vydavatele aplikace. Otázkou pak zůstává, jak vzdáleně takové programy odinstalovat.

Vzdálený přístup na systém nám může zajistit vzdálená relace, nebo v případě software distribuovaného jako msi také parametr ComputerName. Pokud chceme odebrat program, který byl instalován jako MSI, pak potřebujeme identifikační číslo dané instalace programu. Identifikační číslo nejsnáze zjistíme příakzem:

Get-WmiObject Win32_Product | select Name, Version, IdentifyingNumber | FL
#pro vzdálený počítač
Get-WmiObject Win32_Product -ComputerName pc2 | select Name, Version, IdentifyingNumber | FL

Následuje již příklad se samotnou odinstalací programu:

(Get-WmiObject Win32_Product | where IdentifyingNumber -eq "{C17F6DEF-D34C-4B75-97E1-D81062408B4A}").Uninstall()
#pro vzdálený počítač
(Get-WmiObject Win32_Product -ComputerName pc2 | where IdentifyingNumber -eq "{C17F6DEF-D34C-4B75-97E1-D81062408B4A}").Uninstall()

Pokud budu chtít odebrat programy, které jsou instalované pomocí exe souborů, pak potřebuji malinko jiný příkaz, ale i to se dá zvládnout vzdáleně, tentokrát již s pomocí vzdálené relace (Enter-PSSession).

Get-Package -ProviderName Programs -IncludeWindowsInstaller | select Name, Version, Source, ProviderName | FL
#příklad odinstalace 7zipu
Get-Package -Name "7-zip*" | Uninstall-Package
Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server

Kontrola konektivity pomocí PowerShellu

Všichni ověřujeme možnost přístupu někam po síti pomocí příkazu ping, kterému rozumí příkazová řádka i PowerShell včetně všech jeho parametrů. PowerShell ovšem ukrývá dvojici cmdletů, která nám dává lepší možnosti zjištění síťové dostupnosti služby či zařízení. Tím hlavním je Test-NetConnection, který je vylepšenou obdobou pingu, využívá WMI třídu Win32_PingStatus.

Nejjednodušší podobu udává příklad s obecným dotazem na bing.com:

Test-NetConnection bing.com                                                                                                                                                                                                                                                                                                                          ComputerName           : bing.com
RemoteAddress          : 204.79.197.200
InterfaceAlias         : Wi-Fi
SourceAddress          : 192.168.0.21
PingSucceeded          : True
PingReplyDetails (RTT) : 15 ms

Výhodou proti pingu je možnost doptat se na více počítačů najednou, jako v následujícím příkladu, kde jsou počítače rozděleny do skupin dostupných (true) a nedostupných (false)

$computers = "chi-dc01","chi-dc02","chi-dc04","chi-app01","chi-core01"
$computers | group {test-connection -count 1 -ComputerName $_ -quiet}

Další výhodou je možnost ptát se na konkrétní služby, tedy ne jen na to, zda je daný systém online, ale zda je na něm aktivní webserver (http protokol).

Test-NetConnection bing.com -CommonTCPPort HTTP


ComputerName     : bing.com
RemoteAddress    : 204.79.197.200
RemotePort       : 80
InterfaceAlias   : Wi-Fi
SourceAddress    : 192.168.0.21
TcpTestSucceeded : True

Podporované jsou následující protokoly:

  • SMB
  • HTTP
  • RDP

Druhým příkazem je Test-WSMan, který slouží k detekování možnosti vzdálené správy pomocí PowerShellu.

Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server

Správa automatického spouštění aplikací PowerShellem

Všichni čas od času řešíme, co se nám spouští spolu s přihlášením, no startem systému. Často jsou to chtěné funkcionality, jako třeba OneDrive, ale např. Teams již chtěné být nemusí a spousta dalších aplikací zrovna tak. Běžně se tyto problémy dají řešit pomocí Autoruns od Sysinternals, správcem úloh, nebo složitěji přes registry, služby a specifické složky. Ale jak to řešit na vzdáleném počítači? Když vynecháme RDP, AnyDesk a další, které připojí pracovní plochu jiného PC, zbyde nám PowerShell a editor registru (pokud je povolná vzdálená správa registru). A právě o možnostech PowerShellu to dnes bude.

PowerShllem máme 2 možnosti řešení, tu komplexnější, kdy využijeme vzdáleného připojení pomocí Enter-PSSession -ComputerName <název počítače>, nebo budeme využívat parametr ComputerName. Níže budu popisovat řešení přímé připojení se k danému stroji pomocí Enter-PSSession.

Automaticky spouštěné položky vypíšeme následujícím příkazem:

Get-CimInstance Win32_StartupCommand | Select-Object Name, command, Location, User | Format-List

Bližší informace k příkazu Get-CimInstance jsou v dokumentaci. Příkaz Get-CimInstance podporuje parametr ComputerName. Pokud ve výstupu bude uvedeno jako Location: common startup location, jde o cestu: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

Většina položek ovšem povede do registrů. Pro práci s registry se nám budou hodit následující příkazy:

  • Get-ItemProperty -Path <doplň>
  • Remove-ItemProperty -Path <doplň> -Name <doplň>

Pokud naopak budeme chtít něco do autoranu přidat, např. Outlook, tak do registrového klíče doplníme záznam příkazem: New-ItemProperty -Path <doplň> -Name <doplň> -PropertyType <doplň> -Value <doplň>

Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server

Validace a oprava systémových souborů offline

Dostat se do situace, že počítač nestartuje a je potřeba systém opravit pomocí WinRE nebo instalačního média zase není nic vzácného. Opravu spouštěcích souborů už Microsoft předpřipravil jako jedno kliknutí, byť stále ji můžeme provést pomocí příkazové řádky, ale stavy jako je nestartující systém po BSOD z důvodu selhání NTFS.sys neřeší a určitě i v dalších scénářích nemusí postačovat.

Možnosti kontroly jako je chkdsk nebo diskpart nejsou nikomu cizí, ale jak zkontrolovat systémové soubory offline kopie Windows, nebo offline odebrat problémový ovladač, je předmětem tohoto článku. Pro kontrolu a opravu systémových souborů slouží 2 nástroje, SFC a DISM. SFC(system file chacker) je nástroj přímo určený na kontrolu systémových souborů, a pokud chci kontrolovat a opravit offline kopii systému, zapisuji příkaz takto:

sfc /scannow /offbootdir=c:\ /offwindir=c:\windows

Písmenu systémového disku offline kopie Windows, víše C, si zjistím pomocí nástroje diskpart příkazem list volume. Další systémové komponenty je potřeba kontrolovat pomocí DISM, kdy analýzu provedeme příkazem:

Dism /Image:C:\ /Cleanup-Image /scanhealth

Následnou opravu pak:

Dism /Image:C:\ /Cleanup-Image /RestoreHealth

Písmeno disku, víše C, opět pochází z výsledku diskpartu.

Pokud je příčinou pádu systému ovladač (a není to zrovna ntfs.sys, či jiný od MS, ty opraví příkazy výše), tak je možné jej offline odebrat, následně spustit systém a danému zařízení nainstalovat ovladač nový. K zobrazení přesného názvu ovladače využijeme příkaz:

Dism /Image:C:\ /Get-Drivers /format:table

Po nalezení odpovídajícího ovladače jej odebereme pomocí příkazu:

Dism /Image:C:\ /Remove-Driver /Driver:OEM1.inf

V příkladu výše pak OEM.inf je název problémového ovladače, který jsme si našli v tabulce z předešlého příkazu.

Poslední, co se nechá se systémem, krom modifikace registrů a souborů, dělat, je vrácení změn rolí a funkcí, případně aktualizací. Na odebrání posledních aktualizací MS opět nabízí GUI, ale to neřeší případ, že k pádu OS dojde při spouštění v rámci aktualizačního restartu. Stejně tak přidávání či odebírání komponent (jako např. Hyper-V). V těchto případech se pak pomocí DISM vrátí čekající změny příkazem:

DISM /image:C:\ /cleanup-image /revertpendingactions
Posted in: Windows 10, Windows 11, Windows 8 a 8.1, Windows server

Oprava opakovaného vyžádání obnovovacího klíče Bitlocker

Dnes jen malá poznámka o problému, se kterým se setkávám a to je, když nástroj Bitlocker si vyžádá kód pro obnovení i po správně zadaném hesle. Nejčastěji je na vině aktualizace, BIOS bez pozastavené ochrany, ale někdy i ovladačů nebo pouze systému. Níže představím rychlé řešení, které lze aplikovat z běžícího systému, nebo z WinPE po odemčení jednotky, viz starší článek.

Začne řešením pro případ, že jednotka se odemyká automaticky pomocí TPM.

manage-bde -protectors -delete C: -Type TPM
manage-bde -protectors -add c: -tpm

Případ, kdy kombinujeme TPM a PIN je obdobný, příkazy níže:

manage-bde -protectors -delete C: -Type TPMAndPIN
manage-bde -protectors -add c: -TPMAndPIN

Byť to nemusí být nezbytné, doporučuji po této operaci znovu zálohovat klíč pro obnovu. Jak tomuto stavu předcházet? Na 100% to nelze, ale nejčastěji je na vině aktualizace BIOS, proto před jejím započetím doporučuji Bitlocker pozastavit a po jejím dokončení opět obnovit ochranu.

Back to Top