Posted in: Windows 10, Windows 11

Instalace .NET 6 pomocí PowerShellu

V rámci automatizace správy se může hodit instalovat SW pomocí PowerShellu dávkově jedním skriptem. Ani moderní .NET 6 není výjimkou. Instalační skript je možné stáhnout přímo z webu Microsoftu. https://dot.net/v1/dotnet-install.ps1

Ve výchozím stavu je bohužel tímto skriptem instalován .NET do adresáře AppData daného uživatele, který skript sopustí, což není ve firemním prostředí vhodné a není to dobré ani z pohledu bezpečnosti. Osobně mohu doporučit instalovat pomocí následujícího příkazu z PowerShellu spuštěného jako správce:

.\dotnet-install.ps1 -Channel LTS -InstallDir "C:\Program Files\NET6"

Pokud bude instalace provedena takto, bude .NET instalován normálně v Program Files a bude dostupný všem. Podadresář NET6 se vytvoří voláním příkazu automaticky.

Podrobnosti je možné nalézt v dokumentaci MS: dotnet-install scripts – .NET CLI | Microsoft Learn

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

LAPS (Local Administrator Password Solution)

Jde o nástroj Microsoftu na správu hesel lokálního administrátorského účtu v doménovém prostředí. Jde o samostatné řešení, která „má na svědomí“ skupina Čechů pracujících v Microsoftu. Nově aktulializací 04-2023 se potřebné binární soubory staly součástí systému Windows 10 a Windows 11, rovněž pak systémů Windows server 2016, 2019 a 2022. Aktualizací instalovaná komponenta ovšem neobsahuje GUI pro servisní techniky, proto i tak doporučuji stáhnout msi z webu Microsoftu. Na koncových stanicích (pokud se rozhodnete instalovat ručně) stačí provést msiexec /i <cesta k msi instalárotu laps>, nebo využít distribuce pomocí GPO.

Na pracovní stanici administrátora, který se má starat o koncové stanice prak provedeme instalaci pomocí GUI a zvolíme „Fat clietn UI“

Instalace na doménový řadič

Na doménovém řadiči instalaci provedeme pomocí GUI (případně si dohledáme parametry na webu MS) a zvolíme všechny management tools.

Po dokončení instalace je potřeba upravit schéma AD (tato operace se provádí na Schema master kontroleru) pomocí několika PowerShell příkazů. Heslo bude po změně schématu uloženo v objektu počítače a k tomuto atributu budeme nastavovat právo přístupu.

Import-module AdmPwd.PS
Update-AdmPwdADSchema

Nyní musíme přidat patřičná oprávnění skupině správců klientských stanic.

Set-AdmPwdReadPasswordPermission -Identity "PC" -AllowedPrincipals "SpraciPC"

Nyní nastal čas povolit účtům počítačů změnit sám sobě heslo:

Set-AdmPwdComputerSelfPermission -Identity "PC"

Z vlastní zkušenosti mohu říct, že po dokončení instalace a restartu doménového řadiče je ještě potřeba registrovat službu.

regsvr32.exe AdmPwd.dll

Tvorba politiky

Pokud máte central store, bude ještě potřeba překopírovat ADMX šablonu z %windir%\PolicyDefinitions\ do \\domain\SYSVOL\domain\Policies\PolicyDefinitions\ a rozhodně nezapomenout na jazykový balíček šablony.

Celé nastavení technologie je pak v: Computer Configuration > Policies > Administrative Templates > LAPS.

Zde si nastavíme vše potřebné, jako je komplexita hesla a jeho platnost:

Účet lokálního administrátora (pokud nenastavíme, jde o vestavěný účet Administrator [SID končí na 500])

Zakážeme platnost hesla, která je delší, nežli jsme nastavili v zásadách

A nesmíme zapomenou celou konfiguraci (tedy i vlastní správu hesla lokálního admina) zapnout.

Přístup k heslům

Přístup k heslům získají doménový správci a uživatelé ve skupině, které tato práva byla přidělena. Uživatelé s oprávněními pak mohou využít LAPS UI

Nebo pomíc PoiwerShellu:

Get-AdmPwdPassword -ComputerName "AZ-0183-3116-95"
Posted in: Windows 11

Windows 11 Home s lokálním účtem

Dnes to bude trochu o tom, jak se vypořádat s otravným vnucováním Microsoft účtu instalačním programem Windows 11. Nejčastěji se tento problém řeší na zcela nových zařízeních, které mají z výroby předinstalovaný systém Windows 11.

Na edici Pro a vyšší je to přímočaré a jednoduché, viz pár bodů níže:

  • V bodě, jak chcete nastavit sví zařízení zvolíte pro práci nebo školu
  • Následně zvolte možnost: Místo toho připojit k doméně

U edice Home Microsoft takto jednoduše otevřenou volbu neponechává. Existují 2 cesty, přičemž první jsem vyzkoušel s 22H2, druhou pouze se starší 21H2, takže pojďme na to.

Neexistující účet

Jednou z možností využít neexistující účet, mě se osvědčila kombinace:

  • login: a@a.com
  • heslo: Pa$$w0rd

alternativní kombinací údajů pro „účet a heslo“ je:

  • login: microsoft
  • heslo: microsoft

Po zadání se objeví chyba, že se něco pokazilo a instalace pokračuje s lokálním účtem. Alternativní možností je postup, který vyzkoušel magazín Chip a cituji jej níže.

Projděte instalačním procesem Windows 11 až do fáze, kdy si průvodce instalací vyžádá vložení vašeho účtu Microsoft, případně vytvoření účtu nového. Použijte místo toho některou ze známých falešných adres jako například „elonmusk“, „billgates“ nebo „stevejobs“ a pokračujte volbou „Další“. Poté zadejte libovolné heslo a opět pokračujte kliknutím na „Další“. Průvodce instalací následně zobrazí chybovou zprávu, že byl účet uzamčen, protože někdo příliš často zadával špatné heslo. Pokud v tomto okamžiku klepnete na možnost „Další“, instalátor systému Windows 11 Home vám umožní použití lokálního uživatelského účtu.

Vypnutí sítě

Verze 21H2 neochotně provede OOBE fázi instalace i s volbou, že nemám internet. U novějších verzí zabralo vyvolání příkazové řádky (klávesová zkratka [Shift] + [F10]), kde jsou 2 možnosti:

  1. příkazem ncpa.cpl otevřít síťová připojení a zakázat síťový adaptér
  2. příkaz: net user /add admin P@ssw0rd následovaný příkazem: net localgroup administrators admin /add

Nyní uzavřeme příkazovou řádku a v průvodci zvolíme 1 krok zpět (šipka v levém horním rohu). V případě možnosti zakázání síťového adaptéru bude následovat dotaz kdo bude PC používat, kde bude možné uvést lokální účet.

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

Nástroje pro skriptování v PowerShellu

PowerShell, stejně jako další textové Shelly má 2 tváře, příkazové rozhraní a skriptování. Pro příkazové rozhraní slouží konzola PowerShell (na Windows PowerShell.exe), nebo Windows Terminal. Příkazové prostředí slouží k manuálnímu provádění příkazů, nebo spouštění skriptů. Skriptovací rozhraní je malinko složitější, takže si jej rozebereme dále trochu podrobněji.

Nativní nástroj na Windows – PowerShell ISE

Všechny verze Windows s grafickým rozhraním (tedy všechny krom Windows server Core a Windows server Nano) obsahují nástroje PowerShell ISE, který slouží k editaci a tvorbě skriptů a dalších PowerShell souborů. PowerShell ISE je primárně určeno pro Windows PowerShell (tedy PowerShell verze 1.0 až 5.1), pro PowerShell verze 6 a novější je sice možné ISE využít, ale doporučeno je využití VS Code, kde je nápověda a doplňování příkazů nastavená primárně na nejnovější podporovanou verzi PowerShellu. Z nástrojů ostatních vývojářů je snad nejpokročilejším PowerShell studio, ale osobně i tak dávám přednost jednoduchému ISE.

Krom interaktivní možnosti vyhledávání příkazů, jejichž parametry je možné vyplnit pomocí formuláře, umožňuje využívat a vytvářet tzv. snipety.

zadání příkazů z vyhledání a vyplnění formuláře po pravé straně

Snipety

Snipety jsou šablony většího kusu syntaxe, jako jsou třídy, DSC, funkce, cykly či podmínky. Seznam dostupných snipetů se vyvolá stiskem CTRL + J v místě, kam chceme daný snipet vložit.

Ukázka seznamu snipetů obsaženém v CTRL + J

Pojďme si nyní ukázat, jak využít snipet pro tvorbu tzv. andvanced function. Nejprve pomocí CTRL + J vyvoláme nabídku snipetů a v ní najdeme Advanced Function. Po kliknutí na tuto nabídku se nám vloží kód.

Jak je vidět na obrázku výše, vloží se nám šablona kódu, kterou začneme doplňovat, a výsledek může být např.:

<#
.Synopsis
   kontrola systémovýh souborů.
.DESCRIPTION
   kontrola systémových souborů nativními nástroji scf a dism
.EXAMPLE
   Check-SystemFiels -scannow
   provede příkaz sfc /scannow
.EXAMPLE
   Check-SystemFiels -scanfile -Path c:\windows\system32\kernel32.dll
   Provede kontrolu integrity a pokusí se o opravu souboru kernel32.dll
#>
function Check-SystemFiles
{
    Param
    (
        # nápověda
        [Parameter(ValueFromPipelineByPropertyName=$true,
                   Position=0)]
        [string] $path,

        # scannow
        [switch] $scannow,

        #verifikace
        [switch] $verifyonly,

        #kontrola souboru
        [switch] $scanfile,

        #offline kontrola
        [switch] $offline,

        #kontrola souboru
        [switch] $verifyfile,

        #offline boot adresář
        [string] $offbootdir,

        #offline winadresář
        [string] $offwindir,

        #oprava MS Store komponent
        [switch] $store
    )

    Begin
    {
        if((whoami /priv /fo csv | convertfrom-csv | select "Privilege Name")."Privilege Name" -contains "SeImpersonatePrivilege")
        {}
        else
        {
            Write-Error "Tento úkon smí vykonávat pouze správce"
            Start-Process "$PSHOME\powershell.exe" -Verb Runas -ArgumentList "-command 'import-module AdminTools'"
        }
        if($scanfile -and ($path -eq ''))
        {
            Write-Error 'Není uvedená cesta k ověřovanému souboru'
            Pause
        }elseif($verifyfile -and ($path -eq ''))
        {
            Write-Error 'Není uvedená cesta k ověřovanému souboru'
            Pause
        }elseif($offline -and (($path -eq '') -or ($offbootdir -eq '') -or ($offwindir -eq '')))
        {
            Write-Error 'Není uvedená cesta k některému z offline adresářů'
            Pause  
        }
    }
    Process
    {
        if($scannow)
        {
            $prikaz = 'sfc /scannow'
            Invoke-Expression -Command $prikaz
        }
        elseif ($verifyonly)
        {
           $prikaz = 'sfc /verifyonly' 
           Invoke-Expression -Command $prikaz
        }
        elseif ($scanfile)
        {
            $prikaz = 'sfc /scanfile=' + $path
            Invoke-Expression -Command $prikaz
        }
        elseif($verifyfile)
        {
            $prikaz = 'sfc /VERIFYFILE=' + $path
            Invoke-Expression -Command $prikaz
        }
        elseif($offline)
        {
            $prikaz = 'sfc /scanfile=' + $path + '/OFFBOOTDIR=' + $offbootdir + '/OFFWINDIR=' + $offwindir
            Invoke-Expression -Command $prikaz
        }elseif($store)
        {
            $prikaz = 'DISM /Online /cleanup-image /ScanHealth'
            Invoke-Expression -Command $prikaz
            $prikaz = 'dism /online /cleanup-image /restorehealth'
            Invoke-Expression -Command $prikaz
        }
    }
    End
    {
    }
}

Na kódu výše je vidět, že některé části šablony jsem nevyužil a tudíž jsem je smazal. Výhodou využití snipetu je, že člověk při psaní nezapomene na žádnou část včetně nápovědy, která je opravdu důležitá.

Tvorba vlastního snipetu

PowerShell ISE není omezeno pouze na výchozí sadu snipetů, ale každý člověk si může vytvořit vlastní snipety. Jde o dokumenty ve formátu ps1xml. K vytvoření slouží příkaz New-IseSnippet a vlastní šablona (tělo snpetu) se vkládá jako text. Dále uvádím 2 příklady, kterými jsem si rozšířil své ISE, první generuje blok nápovědy k funkci (protože si často píši tělo funkce ručně bez snipetu)

New-IseSnippet -Title Comment-BasedHelp -Description "A template for comment-based help." -Text "<#
.SYNOPSIS
.DESCRIPTION
.PARAMETER  <Parameter-Name>
.INPUTS
.OUTPUTS
.EXAMPLE
.LINK
.NOTE
#>" -Force

Možnost Force říká, že má dojít k přepisu již existujícího snipetu se stejným jménem, tímto parametrem se dosahuje aktualizací (oprav) vlastních snipetů. Druhý příklad prak tvoří šablonu pro vložená povinného parametru funkce či skriptu.

$M = @'
Param
(
  [parameter(Mandatory=$true,ValueFromPipelineByPropertyName=$true,Position=<pozice>)]
  [<type>]
  $<ParameterName>
)
'@
New-ISESnippet -Text $M -Title MandatoryParameter -Description "Adds a mandatory function parameter." -Force

Import Snipetů

Snipety je možné sdílet s kolegy, nebo mezi více zařízeními pomocí sdílené složky, nebe vyměnitelného média. Bohužl takto dostupné snipety není možné hned využívat, ale musí dojít k jejich importu, který se děje pomocí příkazu Import-IseSnippet viz příkaz níže:

Import-IseSnippet -Path \\Server01\Public\Snippets -Recurse

Alternativou je snipety importovat pomocí správy souborů. (takto nelze snipety importovat ze snipetových modulů). Ze zdíleného média zkopírujeme požadované snipety (soubory formátu ps1xml) do: %userprofile%\Documents\WindowsPowerShell\Snippets
Takto přidané snipety jsou k dispozici až po novém spuštění ISE.

Podrobnější informace o snipetech najdete v dokumentaci Na závěr prozradím, že snipety není možné využívat ve VS Code a PowerShell studio má vlastní sadu obdobných možností.

Posted in: Windows 10

Základní informace o instalaci Windows 10 Insiders Preview 2014

Zdravím všechny nedočkavce,
instalační disky pro ty, kteří zápasí s oficiální stahovací stránkou jsou k mání na tomto webu (odkaz bude pod článkem). Instalační klíč je: NKJFK-GPHP7-G8C3J-P6JXR-HQRJR
Doporučuji instalovat do Hyper-V nebo pro opravdové zapálence instalaci na samostatný HDD či nový part.
Požadavky systému jsou:
RAM: 1GB (x86) a 2 GB (X64), není nutné se těch 2 GB RAM bát, spotřeba paměti je obdobná jako u Win 8.1
HDD: 16GB (x86) a 20GB (x64)
CPU: 1,6 GHz , doporučuji intel i3, i5, i7 s taktem nad 2,1 GHz
Ostatní požadavky se shodují s Win8.1
Co se týká ovladačů, tak doporučuji nechat universály, jen pro Wi-Fi a grafickou kartu instalovat ovladač určený pro Windows 8.1 nebo Windows 8.
Může se stát, že systém nebude vyžadovat klíč produkt key, stává se to při instalaci z prostřeí Windows pomocí setup EXE. pokud chceme vytvořit nový part na disku je potřebo bootovat z instalačního média, nebo otevřít složku sources a v ní vyhladat setup.exe, čímž se dostaneme do setapu stejného, jako měly Windows 7 nebo je nám nabídnut při bootu a snadno vytvoříme nový oddíl.
Systém je potřeba aktivovat standartní cestou po internetu a je zde potřeba nechat za všech okolností povolený Windows update.
Po zkušenosti s Virtualizací doporučuji využívat instalace na samostaný diskový part či samostatný disk. Systém je na fyzickém HW diametrálně jiný ve svém chování (stabilnější a rychlejší). Na rozdíl od Windows 8 Dewelopers Preview je tato verze dodávána bez vývojářských nástrojů, ale mají integrovanou aplikaci pro komunikaci s vývojáři a dalšími uživateli.

Posted in: Windows server

GLVK klíče Windows serveru

Dané klíče lze použít v kombinaci s aktivací systému pomocí KMS

Windows server 2019

Operační systémKlíč
Windows Server 2019 DatacenterWMDGN-G9PQG-XVVXX-R3X43-63DFG
Windows Server 2019 StandardN69G4-B89J2-4G8F4-WWYCC-J464C
Windows Server 2019 EssentialsWVDHN-86M7X-466P6-VHXV7-YY726

Windows server 2016

Operační systémKlíč
Windows Server 2016 DatacenterCB7KF-BWN84-R7R2Y-793K2-8XDDG
Windows Server 2016 StandardWC2BQ-8NRM3-FDDYY-2BFGV-KHKQY
Windows Server 2016 EssentialsJCKRF-N37P4-C2D82-9YXRT-4M63B

Windows server 2012 R2

Operační systémKlíč
Windows Server 2012 R2 Server StandardD2N9P-3P6X9-2R39C-7RTCD-MDVJX
Windows Server 2012 R2 DatacenterW3GGN-FT8W3-Y4M27-J84CP-Q3VJ9
Windows Server 2012 R2 EssentialsKNC87-3J2TX-XB4WP-VCPJV-M4FWM

Windows server 2012

Operační systémKlíč
Windows Server 2012BN3D2-R7TKB-3YPBD-8DRP2-27GG4
Windows Server 2012 N8N2M2-HWPGY-7PGT9-HGDD8-GVGGY
Windows Server 2012 Single Language2WN2H-YGCQR-KFX6K-CD6TF-84YXQ
Windows Server 2012 Country Specific4K36P-JN4VD-GDC6V-KDT89-DYFKP
Windows Server 2012 Server StandardXC9B7-NBPP2-83J2H-RHMBY-92BT4
Windows Server 2012 MultiPoint StandardHM7DN-YVMH3-46JC3-XYTG7-CYQJJ
Windows Server 2012 MultiPoint PremiumXNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G
Windows Server 2012 Datacenter48HP8-DN98B-MYWDG-T2DCC-8W83P

Windows server 2008 R2

Operační systémKlíč
Windows Server 2008 R2 Web6TPJF-RBVHG-WBW2R-86QPH-6RTM4
Windows Server 2008 R2 HPC editionTT8MH-CG224-D3D7Q-498W2-9QCTX
Windows Server 2008 R2 StandardYC6KT-GKW9T-YTKYR-T4X34-R7VHC
Windows Server 2008 R2 Enterprise489J6-VHDMP-X63PK-3K798-CPX3Y
Windows Server 2008 R2 Datacenter74YFP-3QFB3-KQT8W-PMXWJ-7M648
Windows Server 2008 R2 for Itanium-based SystemsGT63C-RJFQ3-4GMB6-BRFB9-CB83V

Windows server 2008

Operační systémKlíč
Windows Web Server 2008WYR28-R7TFJ-3X2YQ-YCY4H-M249D
Windows Server 2008 StandardTM24T-X9RMF-VWXK6-X8JC9-BFGM2
Windows Server 2008 Standard without Hyper-VW7VD6-7JFBR-RX26B-YKQ3Y-6FFFJ
Windows Server 2008 EnterpriseYQGMW-MPWTJ-34KDK-48M3W-X4Q6V
Windows Server 2008 Enterprise without Hyper-V39BXF-X8Q23-P2WWT-38T2F-G3FPG
Windows Server 2008 HPCRCTX3-KWVHP-BR6TB-RB6DM-6X7HP
Windows Server 2008 Datacenter7M67G-PC374-GR742-YH8V4-TCBY3
Windows Server 2008 Datacenter without Hyper-V22XQ2-VRXRG-P8D42-K34TD-G3QQC
Windows Server 2008 for Itanium-Based Systems4DWFP-JF3DJ-B7DTH-78FJB-PDRHK
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)

$volba = Read-Host -Promt "Zadej volbu"
{
    1{Get-ADSyncScheduler}
    2{Start-ADSyncSyncCycle -PolicyType Delta}
    3{Start-ADSyncSyncCycle -PolicyType Initial}
}
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é konfigrace různých rolí a funcí 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 $soubor -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.

Back to Top