Kapitola 1 – Začínáme s PowerShellem

Často najdu, že prezentující na konferencích a schůzkách skupin uživatelů už mají při spouštění prezentací na úrovni položek spuštěný PowerShell. Tato kniha začíná zodpovězením otázek, které jsem slyšel, že účastníci, kteří v těchto relacích dříve nepoužívali PowerShell.

Konkrétně se tato kapitola zaměřuje na hledání a spouštění PowerShellu a řešení některých počátečních bodů bolesti, které noví uživatelé s PowerShellem mají. Nezapomeňte postupovat podle pokynů a projít si příklady uvedené v této kapitole na počítači s testovacím prostředím Windows 10.

Co je potřeba začít s PowerShellem?

Všechny moderní verze operačních systémů Windows se dodávají s nainstalovaným PowerShellem. Pokud používáte verzi starší než 5.1, měli byste nainstalovat nejnovější verzi.

Kde najdu PowerShell?

Nejjednodušší způsob, jak najít PowerShell ve Windows 10, je zadat PowerShell do vyhledávacího panelu, jak je znázorněno na obrázku 1–1.

Obrázek 1–1 – Hledání PowerShellu v nabídce Start

Všimněte si, že na obrázku 1–1 jsou zobrazeny čtyři různé klávesové zkratky powershellu. Počítač používaný pro demonstrační účely v této knize používá 64bitovou verzi Windows 10, takže existuje 64bitová verze konzoly PowerShellu a integrovaného skriptovacího prostředí PowerShellu (Integrované skriptovací prostředí) a 32bitová verze každé z nich, jak je označená příponou (x86) u zástupců. Pokud používáte 32bitovou verzi Windows 10, budete mít jenom dvě klávesové zkratky. Tyto položky nemají příponu (x86), ale jsou to 32bitové verze. Pokud máte 64bitový operační systém, doporučujeme spustit 64bitovou verzi PowerShellu, pokud nemáte konkrétní důvod pro spuštění 32bitové verze.

Informace o spuštění PowerShellu v jiných verzích Windows najdete v tématu Spouštění Prostředí Windows PowerShell.

Návody spustit PowerShell?

V produkčních podnikových prostředích, která podporujem, používám tři různé uživatelské účty služby Active Directory. Zrcadlil jsem tyto účty v testovacím prostředí použitém v této knize. Přihlašuji se k počítači s Windows 10 jako uživatel domény, který není doménou nebo místním správcem.

Spustil(a) jsem konzolu PowerShellu kliknutím na zástupce Windows PowerShellu, jak je znázorněno na obrázku 1-1.

Obrázek 1–4 – záhlaví okna PowerShellu

Všimněte si, že záhlaví konzoly PowerShellu říká "Windows PowerShell", jak je znázorněno na obrázku 1–4. Některé příkazy jsou v pořádku, ale PowerShell se nemůže účastnit řízení uživatelských přístupů (UAC). To znamená, že není možné zobrazit výzvu ke zvýšení oprávnění pro úlohy, které vyžadují schválení správce. Vygeneruje se následující chybová zpráva:

Get-Service -Name W32Time | Stop-Service
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to the following
error: Cannot open W32Time service on computer '.'.
At line:1 char:29
+ Get-Service -Name W32Time | Stop-Service
+
    + CategoryInfo          : CloseError: (System.ServiceProcess.ServiceController:ServiceController)
     [Stop-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Commands.StopServiceCommand

Řešením tohoto problému je spuštění PowerShellu jako uživatele domény, který je místním správcem. Takto se konfiguruje druhý uživatelský účet domény. Při použití principu nejnižšího oprávnění by tento účet neměl být správcem domény nebo mít v doméně zvýšená oprávnění.

Zavřete PowerShell. Znovu spusťte konzolu PowerShellu, s výjimkou této chvíle klikněte pravým tlačítkem myši na zástupce Prostředí Windows PowerShell a vyberte Spustit jako správce , jak je znázorněno na obrázku 1 až 5.

Obrázek 1–5 – místní nabídka – Spustit jako správce

Pokud jste přihlášení k Windows jako normální uživatel, zobrazí se výzva k zadání přihlašovacích údajů. Zadám přihlašovací údaje pro svůj uživatelský účet, který je uživatelem domény a místním správcem, jak je znázorněno na obrázku 1–6.

Obrázek 1–6

Jakmile se PowerShell znovu otevře jako správce, měl by se v záhlaví zobrazovat text "Správa istrator: Windows PowerShell", jak je znázorněno na obrázku 1 až 7.

Obrázek 1–7

Když se teď PowerShell spouští se zvýšenými oprávněními jako místní správce, nástroj Řízení uživatelských účtů už nebude problém při spuštění příkazu na místním počítači, který by normálně vyžadoval výzvu ke zvýšení oprávnění. Mějte na paměti, že všechny příkazy se spouštějí z této instance PowerShellu se zvýšenými oprávněními, ale také běží se zvýšenými oprávněními.

Pokud chcete zjednodušit hledání PowerShellu a jeho spuštění jako správce, doporučujeme ho připnout na hlavní panel a nastavit ho tak, aby se při každém spuštění automaticky spustil jako správce.

Znovu vyhledejte PowerShell s tím rozdílem, že na něj kliknete pravým tlačítkem myši a vyberete "Připnout na hlavní panel", jak je znázorněno na obrázku 1-8.

Obrázek 1–8

Klikněte pravým tlačítkem myši na zástupce PowerShellu, který je teď připnutý na hlavní panel, a vyberte vlastnosti, jak je znázorněno na obrázku 1 až 9.

Obrázek 1–9 – Řízení uživatelských účtů – Zadání přihlašovacích údajů

Na obrázku 1–10 klikněte na "Upřesnit" a zaškrtněte políčko Spustit jako správce a zaškrtněte políčko Spustit jako správce, které označuje číslo 2 na obrázku 1–10, a potom kliknutím na tlačítko OK přijměte změny a ukončete obě dialogová okna.

Obrázek 1–10 – záhlaví zobrazující

Nemusíte se starat o vyhledání PowerShellu nebo jestli je spuštěný jako správce.

Spuštění PowerShellu se zvýšenými oprávněními jako správce, aby se zabránilo problémům s nástrojem Řízení uživatelských účtů, má vliv jenom na příkazy, které se spouštějí na místním počítači. Nemá žádný vliv na příkazy, které cílí na vzdálené počítače.

Jakou verzi PowerShellu používám?

PowerShell obsahuje řadu automatických proměnných, které ukládají informace o stavu. Jednou z těchto proměnných je $PSVersionTable, která obsahuje zatřiďovací tabulku, která se dá použít k zobrazení relevantních informací o verzi PowerShellu:

$PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.19041.1
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.1
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Novější verze Windows PowerShellu se distribuují jako součást rozhraní WMF (Windows Management Framework). V závislosti na verzi WMF se vyžaduje konkrétní verze rozhraní .NET Framework. Pokud chcete upgradovat na Windows PowerShell 5.1, přečtěte si téma Upgrade existujícího prostředí Windows PowerShell.

Zásady spouštění

Na rozdíl od oblíbeného přesvědčení není zásada spouštění v PowerShellu hranice zabezpečení. Je navržená tak, aby zabránila uživateli v neúmyslném spuštění skriptu. Určený uživatel může snadno obejít zásady spouštění v PowerShellu. Tabulka 1–2 zobrazuje výchozí zásady spouštění pro aktuální operační systémy Windows.

Verze operačního systému Windows Výchozí zásady spouštění
Server 2019 Vzdálené podepsání
Server 2016 Vzdálené podepsání
Windows 10 Omezeno

Bez ohledu na nastavení zásad spouštění je možné interaktivně spustit libovolný příkaz PowerShellu. Zásada spouštění má vliv jenom na příkazy spuštěné ve skriptu. Tato rutina Get-ExecutionPolicy slouží k určení aktuálního nastavení zásad spouštění a rutiny Set-ExecutionPolicy slouží ke změně zásad provádění. Doporučujeme použít zásadu RemoteSigned , která vyžaduje podepsání stažených skriptů důvěryhodným vydavatelem, aby bylo možné spustit.

Zkontrolujte aktuální zásady spuštění:

Get-ExecutionPolicy
Restricted

Skripty PowerShellu se nedají spustit vůbec, pokud je zásada spouštění nastavená na Omezený. Toto je výchozí nastavení ve všech klientských operačních systémech Windows. Chcete-li předvést problém, uložte následující kód jako soubor s .ps1 názvem Stop-TimeService.ps1.

Tip

Skript PowerShellu je soubor prostého textu s příponou .ps1 , která obsahuje příkazy, které chcete spustit. Pokud chcete vytvořit skript PowerShellu, použijte editor kódu, jako je Visual Studio Code (VS Code) nebo jakýkoli textový editor, jako je Poznámkový blok.

Get-Service -Name W32Time | Stop-Service -PassThru

Tento příkaz se spustí interaktivně bez chyby, pokud se PowerShell spustí se zvýšenými oprávněními jako správce. Jakmile se ale uloží jako soubor skriptu a pokusíte se skript spustit, vygeneruje se chyba:

.\Stop-TimeService.ps1
.\Stop-TimeService.ps1 : File C:\demo\Stop-TimeService.ps1 cannot be loaded because
running scripts is disabled on this system. For more information, see
about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Stop-TimeService.ps1
+
    + CategoryInfo          : SecurityError: (:) [], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess

Všimněte si, že chyba zobrazená v předchozí sadě výsledků vám přesně říká, co je problém (spouštění skriptů je v tomto systému zakázané). Když v PowerShellu spustíte příkaz, který vygeneruje chybovou zprávu, nezapomeňte místo opětovného spuštění příkazu přečíst chybovou zprávu a doufat, že se úspěšně spustí.

Změňte zásady spouštění PowerShellu na vzdálené podepsané.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution
policy might expose you to the security risks described in the about_Execution_Policies help topic
at http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"):y

Nezapomeňte si přečíst upozornění, které se zobrazí při změně zásad spuštění. Také doporučuji podívat se na téma nápovědy about_Execution_Policies , abyste porozuměli dopadům na zabezpečení při změně zásad spouštění.

Teď, když je zásada spuštění nastavena na RemoteSigned, Stop-TimeService.ps1 skript spustí chybu bez.

.\Stop-TimeService.ps1
Status   Name               DisplayName
------   ----               -----------
Stopped  W32Time            Windows Time

Než budete pokračovat, nezapomeňte spustit službu Windows Time, jinak může docházet k nepředvídatelným problémům.

Start-Service -Name w32time

Shrnutí

V této kapitole jste se naučili, jak najít a spustit PowerShell a jak vytvořit zástupce, který spustí PowerShell jako správce. Dozvěděli jste se také o výchozích zásadách spouštění a o tom, jak ji změnit.

Přehled

  1. Jak zjistíte, jakou verzi PowerShellu počítač používá?
  2. Proč je důležité spustit PowerShell se zvýšenými oprávněními jako správce?
  3. Jak určíte aktuální zásady spouštění PowerShellu?
  4. Jaké výchozí zásady spouštění PowerShellu na klientských počítačích s Windows brání výskytu?
  5. Jak změníte zásady spouštění PowerShellu?

Pro ty, kteří chtějí získat další informace o tématech popsaných v této kapitole, doporučuji přečíst následující témata nápovědy k PowerShellu.

V další kapitole se dozvíte o zjistitelnosti příkazů v PowerShellu. Jednou z věcí, které se budou probírat, je, jak aktualizovat PowerShell, aby se tato témata nápovědy zobrazovala přímo z PowerShellu, a nemusela je prohlížet na internetu.