Kapitola 1 – Začínáme s PowerShellem
Tato kapitola se zaměřuje na hledání a spouštění PowerShellu a řešení počátečních bodů bolesti, které noví uživatelé s PowerShellem mají. Postupujte podle pokynů a projděte si příklady v této kapitole na počítači testovacího prostředí.
Co je PowerShell?
Windows PowerShell je snadno použitelné prostředí příkazového řádku a skriptovací prostředí pro automatizaci úloh správy systémů Windows. Windows PowerShell je předinstalovaný ve všech moderních verzích operačního systému Windows.
Kde najít PowerShell
Nejjednodušší způsob, jak najít PowerShell ve Windows 11, je zadat PowerShell
do vyhledávacího panelu, jak je znázorněno na obrázku 1-1. Všimněte si, že pro Windows PowerShell existují čtyři různé klávesové zkratky.
Klávesové zkratky Windows PowerShellu v 64bitové verzi Windows:
- Windows PowerShell
- Integrované skriptovací prostředí (ISE) v prostředí Windows PowerShell
- Windows PowerShell (x86)
- Prostředí Windows PowerShell ISE (x86)
V 64bitové verzi Windows máte 64bitovou verzi konzoly Windows PowerShellu a integrované skriptovací prostředí (ISE) windows PowerShellu a 32bitovou verzi každé z nich, jak je uvedeno příponou (x86) u klávesových zkratek.
Poznámka:
Windows 11 se dodává pouze jako 64bitový operační systém. Neexistuje 32bitová verze Windows 11. Windows 11 ale obsahuje 32bitové verze Windows PowerShellu a prostředí Windows PowerShell ISE.
Pokud používáte starší 32bitovou verzi Windows, máte jenom dvě klávesové zkratky. Tyto klávesové zkratky nemají příponu (x86), ale jsou to 32bitové verze.
Pokud používáte 64bitový operační systém, doporučujeme použít 64bitovou verzi Windows PowerShellu, pokud nemáte konkrétní důvod pro použití 32bitové verze.
V závislosti na verzi Windows 11, kterou používáte, se může Windows PowerShell otevřít v Terminál Windows.
Microsoft už neaktualizovat prostředí PowerShell ISE. IsE funguje jenom s Windows PowerShellem 5.1. Visual Studio Code (VS Code) s rozšířením PowerShellu funguje s oběma verzemi PowerShellu. VS Code a rozšíření PowerShellu se ve Windows nedoručují. Nainstalujte VS Code a rozšíření do počítače, kde vytváříte skripty PowerShellu. Nemusíte je instalovat na všechny počítače, na kterých spouštíte PowerShell.
Spuštění PowerShellu
V produkční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 11 jako uživatel domény bez oprávnění k doméně nebo místnímu správci.
Spusťte konzolu PowerShellu kliknutím na zástupce Prostředí Windows PowerShell , jak je znázorněno na obrázku 1–1. Všimněte si, že záhlaví konzoly říká Prostředí Windows PowerShell, jak je znázorněno na obrázku 1–2.
Některé příkazy běží správně, když spustíte PowerShell jako běžný uživatel. PowerShell se ale neúčastní ří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.
Poznámka:
Řízení uživatelských účtů je funkce zabezpečení systému Windows, která pomáhá zabránit spuštění škodlivého kódu se zvýšenými oprávněními.
Když se přihlásíte jako běžný uživatel, PowerShell vrátí chybu při spuštění příkazu, který vyžaduje zvýšení oprávnění. Například zastavení služby systému Windows:
Stop-Service -Name W32Time
Stop-Service : Service 'Windows Time (W32Time)' cannot be stopped due to
the following error: Cannot open W32Time service on computer '.'.
At line:1 char:1
+ Stop-Service -Name W32Time
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (System.ServiceProcess.ServiceCon
troller:ServiceController) [Stop-Service], ServiceCommandException
+ FullyQualifiedErrorId : CouldNotStopService,Microsoft.PowerShell.Comm
ands.StopServiceCommand
Řešením je spustit PowerShell se zvýšenými oprávněními jako uživatel, který je místním správcem. Takto jsem nakonfiguroval svůj druhý uživatelský účet domény. Podle principu nejnižších oprávnění by tento účet neměl být správcem domény ani mít v doméně zvýšená oprávnění.
Pokud chcete spustit PowerShell se zvýšenými oprávněními, 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ž 3.
Systém Windows vás vyzve k zadání přihlašovacích údajů, protože jste se k Systému Windows přihlásili jako běžný uživatel. Zadejte přihlašovací údaje uživatele domény, který je místním správcem, jak je znázorněno na obrázku 1–4.
Všimněte si, že záhlaví okna konzoly se zvýšenými oprávněními říká Správce: Windows PowerShell, jak je znázorněno na obrázku 1–5.
Když teď používáte PowerShell se zvýšenými oprávněními jako správce, nástroj Řízení uživatelských účtů už není problém při spuštění příkazu, který vyžaduje zvýšení oprávnění.
Důležité
PowerShell byste měli spouštět jenom v případě potřeby jako správce se zvýšenými oprávněními.
Když cílíte na vzdálené počítače, není potřeba spustit powershell se zvýšenými oprávněními. Spuštění PowerShellu se zvýšenými oprávněními má vliv jenom na příkazy, které běží na místním počítači.
Můžete zjednodušit hledání a spouštění PowerShellu. Připněte zástupce PowerShellu nebo Terminál Windows na hlavní panel. 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 až 6.
Důležité
Původní verze této knihy, publikovaná v roce 2017, doporučila připnout zástupce na hlavní panel a spustit instanci se zvýšenými oprávněními automaticky při každém spuštění PowerShellu. Vzhledem k potenciálním obavám o zabezpečení už ho však nedoporučím. Všechny aplikace, které spustíte z instance PowerShellu se zvýšenými oprávněními, také vynechají řízení uživatelských účtů a spustí se zvýšenými oprávněními. Pokud například spustíte webový prohlížeč z instance PowerShellu se zvýšenými oprávněními, spustí se také všechny weby, které navštívíte obsahující škodlivý kód.
Když potřebujete spustit PowerShell se zvýšenými oprávněními, klikněte pravým tlačítkem myši na zástupce PowerShellu připnutý na hlavní panel a stiskněte Shift. Vyberte Spustit jako správce, jak je znázorněno na obrázku 1 až 7.
Určení verze PowerShellu
V PowerShellu jsou automatické proměnné, které ukládají informace o stavu. Jednou z těchto proměnných je $PSVersionTable
, která obsahuje informace o verzi relace PowerShellu.
$PSVersionTable
Name Value
---- -----
PSVersion 5.1.22621.2428
PSEdition Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.22621.2428
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
Pokud používáte verzi Windows PowerShellu starší než 5.1, měli byste aktualizovat svou verzi Windows. Windows PowerShell 5.1 je předinstalovaný v aktuálně podporovaných verzích Windows.
PowerShell verze 7 není náhradou za Windows PowerShell 5.1; instaluje se souběžně s Windows PowerShellem. Windows PowerShell verze 5.1 a PowerShell verze 7 jsou dva různé produkty. Další informace o rozdílech mezi Prostředím Windows PowerShell verze 5.1 a PowerShellem verze 7 najdete v tématu Migrace z Prostředí Windows PowerShell 5.1 na PowerShell 7.
Tip
PowerShell verze 6, dříve označovaná jako PowerShell Core, se už nepodporuje.
Zásada provádění
Zásady spouštění PowerShellu řídí podmínky, za kterých můžete spouštět skripty PowerShellu. Zásady spouštění v PowerShellu jsou bezpečnostní funkce navržená tak, aby zabránila neúmyslnému spuštění škodlivých skriptů. Nejedná se ale o hranici zabezpečení, protože nemůže zastavit úmyslné spouštění skriptů určeným uživatelům. Určený uživatel může obejít zásady spouštění v PowerShellu.
Můžete nastavit zásady spouštění pro místní počítač, aktuálního uživatele nebo relaci PowerShellu. Můžete také nastavit zásady spouštění pro uživatele a počítače se zásadami skupiny.
Následující tabulka uvádí 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í |
---|---|
Windows Server 2022 | Vzdálené podepsání |
Windows Server 2019 | Vzdálené podepsání |
Windows Server 2016 | Vzdálené podepsání |
Windows 11 | Omezeno |
Windows 10 | Omezeno |
Bez ohledu na nastavení zásad spouštění můžete interaktivně spustit libovolný příkaz PowerShellu. Zásada spouštění má vliv jenom na příkazy spuštěné ve skriptu. Pomocí rutiny Get-ExecutionPolicy
určete aktuální nastavení zásad spouštění.
Zkontrolujte nastavení zásad spouštění v počítači.
Get-ExecutionPolicy
Restricted
Vypíše nastavení zásad spouštění pro všechny obory.
Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine Undefined
Všechny klientské operační systémy Windows mají výchozí nastavení Restricted
zásad spouštění . Pomocí nastavení zásad spouštění nemůžete spouštět skripty PowerShellu Restricted
. Pokud chcete otestovat zásadu spuštění, uložte následující kód jako soubor s .ps1
názvem Get-TimeService.ps1
.
Tip
Skript PowerShellu je soubor prostého textu, který obsahuje příkazy, které chcete spustit. Soubory skriptů PowerShellu používají příponu .ps1
souboru. 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.
Když spustíte následující příkaz interaktivně, dokončí se bez chyby.
Get-Service -Name W32Time
PowerShell ale vrátí chybu při spuštění stejného příkazu ze skriptu.
.\Get-TimeService.ps1
.\Get-TimeService.ps1 : File C:\tmp\Get-TimeService.ps1 cannot be loaded
because running scripts is disabled on this system. For more information,
see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ .\Get-TimeService.ps1
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess
Když v PowerShellu spustíte příkaz, který vygeneruje chybu, před opakováním příkazu si přečtěte chybovou zprávu. Všimněte si chybové zprávy s informacemi o tom, proč příkaz selhal:
... v tomto systému jsou zakázány spuštěné skripty.
Pokud chcete povolit spouštění skriptů, změňte zásadu spouštění pomocí rutiny Set-ExecutionPolicy
. LocalMachine
je výchozí obor, pokud nezadáte parametr Scope . Pokud chcete změnit zásady spouštění místního počítače, musíte spustit PowerShell se zvýšenými oprávněními jako správce.
Pokud skripty podepisujete, doporučujeme použít zásadu RemoteSigned
spouštění.
RemoteSigned
zabraňuje spuštění stažených skriptů, které nejsou podepsány důvěryhodným vydavatelem.
Než změníte zásady spouštění, přečtěte si článek nápovědy about_Execution_Policies , kde najdete vysvětlení dopadů na zabezpečení.
Změňte nastavení zásad spouštění v počítači na RemoteSigned
.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
Pokud jste zásadu spouštění úspěšně změnili, PowerShell zobrazí následující upozornění:
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
https:/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
Pokud nepoužíváte PowerShell se zvýšenými oprávněními správce, PowerShell vrátí následující chybovou zprávu:
Set-ExecutionPolicy : Access to the registry key 'HKEY_LOCAL_MACHINE\SOFTWAR
E\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell' is denied. To
change the execution policy for the default (LocalMachine) scope, start
Windows PowerShell with the "Run as administrator" option. To change the
execution policy for the current user, run "Set-ExecutionPolicy -Scope
CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy],
UnauthorizedAccessException
+ FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.
PowerShell.Commands.SetExecutionPolicyCommand
Je také možné změnit zásady spouštění pro aktuálního uživatele, aniž byste museli spustit PowerShell se zvýšenými oprávněními správce. Tento krok není nutný, pokud jste úspěšně nastavili zásady spouštění místního počítače na RemoteSigned
.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Když je zásada spouštění nastavená na RemoteSigned
, Get-TimeService.ps1
skript se úspěšně spustí.
.\Get-TimeService.ps1
Status Name DisplayName
------ ---- -----------
Running W32Time Windows Time
Shrnutí
V této kapitole jste zjistili, kde najít a jak spustit PowerShell. Dozvěděli jste se také, jak určit verzi PowerShellu a účel zásad spouštění.
Přehled
- Jak zjistíte, jakou verzi PowerShellu počítač používá?
- Kdy byste měli spustit PowerShell se zvýšenými oprávněními jako správce?
- Jaké jsou výchozí zásady spouštění na klientských počítačích s Windows a co vám brání v provádění?
- Jak určíte aktuální nastavení zásad spouštění PowerShellu?
- Jak změníte zásady spouštění PowerShellu?
Reference
Další informace o konceptech popsaných v této kapitole najdete v následujících článcích nápovědy k PowerShellu.
Další kroky
V další kapitole se dozvíte o zjistitelnosti příkazů v PowerShellu. Dozvíte se také, jak stáhnout soubory nápovědy PowerShellu, abyste si mohli zobrazit nápovědu v relaci PowerShellu.