Powershell mění zásady provádění skriptů. Psaní a spouštění skriptů v PowerShellu

V administrativě je vždy prostor pro kreativitu. Chcete udělat nějakou automatizaci rutinního úkolu? Prosím! Potřebujete pravidelně něco kontrolovat na aktivitu? Žádný problém! Chcete zpracovat nějaký obří report a zobrazit pouze relevantní data? I to je možné. Všechny tyto a mnohé další úkoly se nejlépe řeší pomocí skriptů a PowerShell je v případě Windows optimální volbou.

Co je PowerShell a proč je dobrý?

Uživatelé UNIXu a Linuxu a v určitém okamžiku i macOS jsou zvyklí mít vždy po ruce Bash – trochu staromódní, ale univerzální a výkonný nástroj, s nímž se dají dělat úžasné věci jen s pár řádky. Zaregistrujete nový skript v cronu – a máte hotovo, už běží na vašem počítači nebo serveru a tiše dělá něco užitečného.

Když se vrátíte do systému Windows (a někdy se bez něj neobejdete), chápete, že skripty .bat, i když jsou dobré, vás vždy nezachrání: jejich možnosti jsou velmi omezené. A pokud jste si stále mysleli, že PowerShell je neznámá věc, pro kterou musíte něco vyzvednout a nakonfigurovat, pak nespěchejte se závěry - když se na to podíváte, není to vůbec špatné.

Windows PowerShell je rozšiřitelný open source automatizační nástroj, který se skládá z shellu (příkazového řádku) a skriptovacího jazyka. Poprvé byl uveden v roce 2003 (tehdy se jmenoval Monad). PowerShell 2.0 byl vydán jako součást Windows 7 a Windows Server 2008 R2 a od té doby je ve Windows přítomen jako standardní funkce. Byl dokonce součástí Windows XP SP3. PowerShell je postaven na rozhraní .NET Framework a je s ním integrován. PowerShell má přístup k COM, WMI a ADSI a samozřejmě také provádí příkazy konzoly.

Obecně platí, že nóbl má silné vazby na produkty společnosti Microsoft, ať už je to tak Aktivní adresář nebo poštovní Exchange server. To vám umožňuje přistupovat k nim prostřednictvím konzoly a zadávat příkazy bez připojení k serverovému zařízení.

Pokud vás PowerShell dříve nezajímal, pak s největší pravděpodobností máte druhou verzi. Doporučuji upgradovat alespoň na třetí - obsahuje mnohem více funkcí a Užitečné tipy. Aniž bychom zacházeli do podrobností, PowerShell 2.0 obsahuje asi tucet modulů a asi 350 příkazů a PowerShell 3.0 již má asi 2 300 cmdletů z více než 70 modulů. „Hacker“ také psal o tom, jak se liší nejnovější PowerShell verze 5 od Windows 10.

Výběr vývojového prostředí a nástrojů

Nyní pojďme zjistit, kde je nejpohodlnější psát kód. Můžete samozřejmě také v programu Notepad, Notepad++ nebo Sublime. Ale tohle je in v tomto případě Není to nejchytřejší volba editora. Nejlepší je začít se seznamováním s PowerShellem vyzbrojeným přiloženým .


Nejedná se ani o editor, ale o téměř plnohodnotné vývojové prostředí. K dispozici je funkce IntelliSense, která umožňuje zobrazit seznam rutin a jejich parametrů, proměnných, utilit a další. Podporovány jsou úryvky, sadu funkcí je možné rozšířit prostřednictvím různých doplňků. Velmi užitečné je také okno Příkazy. V něm můžete skládat příkazy ve vizuálním režimu: vyberete modul, najdete požadovaný cmdlet a nastavíte mu potřebné parametry. Výsledný příkaz lze zkopírovat do konzole nebo okamžitě provést. Obecně jakýsi designér pro admina. A samozřejmě nechybí zvýraznění syntaxe, debugger a mnoho dalšího.

PowerShell ISE však také má důstojní konkurenti. Jeden z nich -.

PowerGUI je vizuální rozšíření prostředí PowerShell. Usnadňuje vytváření vlastních skriptů před výběrem rutin, které potřebujete. Vezmete si, co potřebujete k vyřešení problému, a přetáhněte části kódu, dokud nezískáte skript. Jednou z hlavních funkcí PowerGUI jsou Power Packs, hotové skripty publikované komunitou uživatelů a zpřístupněné zdarma. Existují jednoduché příkazy, jako je přidávání uživatelů, a složité příkazy – například správa přepínačů a virtuálních strojů. Všechny lze snadno doplňovat a upravovat podle potřeb.


Společnosti Sapien jsou pokročilejším prostředím, které je určeno pro společný vývoj jednoho projektu velké množstvíúčastníků. Pokud jste někdy pracovali s Visual Studio, myslím, že si všimnete podobností. Mezi užitečné funkce PowerShell Studio patří panel pásu karet, podpora vzdáleného ladění a funkce kompilátoru, které umožňují zahrnout skripty do spustitelné soubory. Existuje podpora různé verze PowerShell.


Za zmínku také stojí Prohlížeč skriptů pro Windows PowerShell ISE. Nejedná se o vývojové prostředí, ale o velmi zajímavý nástroj vyvinutý společností Microsoft. Prohlížeč skriptů poskytuje přístup k databázi hotových skriptů, které lze použít jako vzorky pro psaní vlastního kódu. Tato věc může také analyzovat kód, který napíšete, a navrhnout, jak jej zlepšit.


Pár užitečných triků

Jakmile zjistíte editor, můžete začít psát kód. PowerShell není složitý jazyk a myslím, že se v něm rychle zorientujete. Příkazy se zde nazývají cmdlety a každý z nich se skládá ze dvou částí. Jako první přichází na řadu akce, například Get, Set, Add, Invoke, Remove. Poté označuje, na co je akce zaměřena: Služba, VM, AzureAccount, DHCPServerSetting. Každá část je od druhé oddělena pomlčkou. Ukazuje se například get-process. Toto, mimochodem, užitečný příkaz, který zobrazuje seznam procesů. Řekněme, když napíšete

získat - zpracovat BadTh *

uvidíme něco takového:

Zvládá NPM (K ) PM (K ) WS (K ) VM (M ) CPU (y) ID ProcessName

------------------------

28 4 - 210844 - 201128 - 163 25,67 2792 BadThread

Nyní můžete ukončit zmrazený proces:

Můžete to zobrazit rekurzivně, i když s trochu složitější logikou:

Můžete také udělat

Mimochodem, pro každé pole v okně možností účet nebo počítač, ke kterému můžete přistupovat a číst data. Tímto způsobem můžete vytvořit celé sekce. Zde je například dotaz založený na údajích o telefonní čísla:

Získat - AdUser - Filtr * - Vlastnosti OfficePhone | FT OfficePhone, UserPrincipalName

PowerShell vs bat

Někdy lze problém vyřešit pomocí staromódní metody nebo pomocí PowerShellu. Doporučuji nelenit a používat PS, už jen proto, že se ho tak rychleji naučíte a budete ho moci používat ve složitějších situacích. Navíc postupně oceníte jeho syntaxi – elegantnější a konzistentnější. Zde je několik příkladů toho, jak se věci dělaly dříve a jak je lze provádět pomocí PowerShellu.

Následující příkazový řádek restartuje počítač se zpožděním deseti sekund:

Takto můžete restartovat službu dnscache (nebo jakoukoli jinou) přes bat:

sc stop dnscache

sc spusťte dnscache

Spuštění skriptu PowerShellu

Tato poznámka je věnována popisu nastavení požadované parametry pro začátek PowerShell skripty. Nejčastěji při prvním startu .ps1 skripty, které vidíte následující chyby:

Soubor nelze načíst. Soubor nemá digitální podpis. Skript se v systému nespustí. Pro více informací zadejte příkaz "Get-Help about_signing".
Soubor nelze načíst. Soubor není digitálně podepsána. Skript se v systému nespustí. Další podrobnosti naleznete v části „Získat pomoc o_podepisování“.

Spustit program od nespolehlivého vydavatele? Soubor vydává CN= Tento vydavatel není tímto systémem označen jako důvěryhodný. Skripty byste měli spouštět pouze od důvěryhodných vydavatelů.
[V] Nikdy nespouštět [D] Nespouštět [R] Spustit jednou [A] Vždy spouštět [?] Nápověda (výchozí "D"):
Chcete spouštět software od tohoto nedůvěryhodného vydavatele? Soubor vydává CN= Tento vydavatel není ve vašem systému důvěryhodný. Spouštějte skripty pouze od důvěryhodných vydavatelů.
[V] Nikdy nespouštět [D] Nespouštět [R] Spustit jednou [A] Vždy spouštět [?] Nápověda (výchozí je „D“):

Tyto chyby a zprávy jsou způsobeny nastavením zásad Provádění systému Windows PowerShell. Neměli byste si však myslet, že tyto parametry ve skutečnosti zvyšují bezpečnost operačního systému, protože kód bude stále fungovat, pokud jej zkopírujete do konzoly PowerShell. Nastavení zabezpečení lze tedy deaktivovat – chrání pouze před náhodnými akcemi. Proto obvykle tento problém řeší tým:

Set-ExecutionPolicy Unrestricted LocalMachine

Tento přístup samozřejmě není použitelný ve firemním prostředí, takže se na tuto situaci podívejme podrobněji. Spuštěním rutiny můžete zobrazit aktuální nastavení zásad ve všech oblastech aplikace Get-Execution policy s parametrem seznam.

get-executionpolicy -list

Rozsah ExecutionPolicy
—— —————
MachinePolicy Neomezený
Uživatelské zásady Nedefinováno
Proces RemoteSigned
Současný uživatel Vše podepsáno
LocalMachine Omezený

Tato zásada může mít 6 hodnot:

Omezený(Zásada se provede ve výchozím nastavení. Pokud jsou například všechny oblasti aplikace nastaveny na Nedefinováno)
— Umožňuje jednotlivé příkazy, ale nelze provádět skripty.
- Zabraňuje spuštění všech souborů skriptů, včetně formátovacích a konfiguračních souborů (PS1XML), souborů skriptů modulů (PSM1) a profilů prostředí Windows PowerShell (PS1).

Vše podepsáno

- Vyžaduje, aby všechny skripty a konfigurační soubory byly podepsány důvěryhodným vydavatelem, včetně skriptů připravených v místní počítač.
- Před spuštěním skriptů vydavatele, které ještě nebyly označeny jako důvěryhodné, jsou vydávána varování.
— Existuje riziko spouštění nepodepsaných skriptů z jiných zdrojů než je internet, stejně jako podepsaných, ale škodlivých skriptů.

RemoteSigned
— Spouštění skriptů je povoleno.
— Vyžaduje, aby skripty a konfigurační soubory stažené z internetu byly digitálně podepsány důvěryhodným vydavatelem (včetně e-mailem a programy pro rychlé zasílání zpráv).
— Nevyžaduje digitální podpisy pro skripty spouštěné a zapsané na místním počítači (nestažené z internetu).
— Existuje riziko spuštění podepsaných, ale škodlivých skriptů.

Neomezený
- Lze spouštět nepodepsané skripty. (Existuje riziko spuštění škodlivých skriptů.)
- Varuje uživatele před spuštěním skriptů a konfiguračních souborů stažených z internetu.

Bypass
— Nic není blokováno a nezobrazují se žádná varování ani požadavky.
- Tato zásada provádění je určena pro konfigurace, ve kterých Windows skript PowerShell je zabudován do větší aplikace nebo pro konfigurace, kde je platformou pro program Windows PowerShell, který má svůj vlastní model zabezpečení.

Nedefinováno
— Aktuální rozsah nemá nastavenou politiku provádění.
- Pokud je zásada provádění ve všech rozsazích Nedefinovaná, je zásada provádění Omezená, což je výchozí zásada provádění.

Tyto zásady a nastavení platí v pěti oblastech:

MachinePolicy A Uživatelské zásady jsou nastaveny politikami AD popř místní politici tohoto počítače.
Proces— rozsah použití: aktuální relace. Nápověda říká, že její hodnota je uložena v proměnné $PSExecutionPolicyPreference, pomocí proměnné však nebylo možné získat/změnit hodnotu této politiky. Změny provedené v této oblasti aplikace neovlivní ostatní relace.
Současný uživatel— rozsah aktuálního uživatele. Jeho hodnota je uložena v klíči registru HKEY_CURRENT_USER („HKEY_CURRENT_USER\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell\ExecutionPolicy“).
LocalMachine— rozsah použití pro všechny uživatele aktuálního počítače. Je uložen v klíči registru HKEY_LOCAL_MACHINE("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\ScriptedDiagnostics\ExecutionPolicy").

Tým get-executionpolicy existuje parametr -Scope. Pomocí tohoto parametru můžete vybrat rozsah, pro který se bude hodnota zásady zobrazovat.

Get-ExecutionPolicy -scope Proces

Výsledek spuštění rutiny: RemoteSigned

V tomto případě mají prioritu oblasti aplikace, nejvyšší prioritu MachinePolicy a nejnižší prioritu má UserPolicy, Process, CurrentUser a LocalMachine.
Proto v příkladu:

Rozsah ExecutionPolicy
—— —————
MachinePolicy Neomezený
Uživatelské zásady Nedefinováno
Proces RemoteSigned
Současný uživatel Vše podepsáno
LocalMachine Omezený

V aktuální relaci bude výsledná zásada Neomezená.

Chcete-li zjistit hodnotu zásady provádění skriptu pro danou relaci, musíte použít rutinu Get-ExecutionPolicy bez parametrů.

Závěr: Bez omezení

Změna zásad provádění skriptů PowerShell:

Chcete-li změnit hodnotu zásad provádění skriptů PowerShell, existuje rutina Set-ExecutionPolicy.
Tato rutina má následující parametry:

-Politika provádění
Označuje hodnotu politiky. Může mít následující hodnoty: Restricted, AllSigned, RemoteSigned, Unrestricted, Bypass, Undefined. Tento parametr nutné specifikovat. Pokud není zadáno, komadlet se zeptá na hodnoty za běhu.

Závěr:
Zadejte hodnoty pro následující parametry:
ExecutionPolicy:

-Rozsah
Definuje rozsah těchto zásad. Může mít následující hodnoty: LocalMachine, Process, CurrentUser. Pokud není zadán parametr oboru, výchozí hodnota je LocalMachine.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process

Set-ExecutionPolicy Neomezený proces

-Platnost
S tímto parametrem nebude rutina vyžadovat potvrzení od uživatele. Například:

Set-ExecutionPolicy Neomezený proces -Vynutit

Rutina nic nezobrazí a použije hodnotu zásady.

-Potvrdit
Pokud vám naopak jedno potvrzení nestačí. Můžete zadat parametr Potvrdit a budete mít další, dodatečný požadavek na potvrzení vašich akcí:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope Process -confirm

Výsledek provedení:

potvrzení
Opravdu chcete provést tuto akci?
Provedení operace "Set-ExecutionPolicy" na cílovém objektu "Unrestricted".
[A] Ano - A [A] Ano pro všechny - A [N] Ne - N [L] Ne pro všechny - L [S] Pozastavit - S [?] Nápověda (výchozí hodnota je "Y"):

Změna zásad provádění
Zásady provádění chrání váš počítač před nedůvěryhodnými skripty. Změna zásady provádění může ohrozit zabezpečení systému, jak je popsáno v tématu nápovědy pro příkaz about_Execution_Policies. Chcete změnit zásady provádění?
[A] Ano - A [N] Ne - N [S] Pozastavit - S [?] Nápověda (výchozí hodnota je "Y"):. exe -executionpolicy Neomezeno

Get-ExecutionPolicy -list

Výsledek provedení:

Rozsah ExecutionPolicy
—— —————
MachinePolicy Neomezený
Uživatelské zásady Nedefinováno
Proces RemoteSigned
Současný uživatel Vše podepsáno
LocalMachine Omezený

Změna nastavení zásad spouštění skriptu pomocí zásad skupiny.

V zásadách skupiny je parametr, který řídí spouštění skriptů, umístěn podél cesty:

Pro MachinePolicy:

Konfigurace počítače/Zásady/Šablony pro správu/Součásti systému Windows/Windows PowerShell

Konfigurace počítače/Šablony pro správu/Součásti systému Windows/Windows PowerShell

Pro Uživatelské zásady:
Konfigurace uživatele/Zásady/Šablony pro správu/Součásti systému Windows/Windows PowerShell

Konfigurace uživatele/Šablony pro správu/Součásti systému Windows/Windows PowerShell

Parametr Execution Policy může nabývat 3 hodnot.

PowerShell je alternativní příkazový řádek s rozsáhlou funkčností. Mnoho majitelů počítačů, kteří se v nich dobře vyznají systémové procesy, se zajímají o možnosti použití na Windows 10 a předchozí verze tento software pro vlastní změnu specifických procesů a nastavení počítače.

Na používání PowerShellu není nic složitého. Stačí dodržovat všechny pokyny v tomto článku a uspějete.

Pokud nejste odborníkem na toto téma, teprve začínáte studovat příkazové řádky a akce, které v nich lze provádět, bude pro vás užitečné znát odpovědi na hlavní otázky týkající se používání takové aplikace. Například jak spouštět Windows PowerShell ISE Windows 10 a psát a pracovat se skripty.

Jak otevřít PowerShell?

To lze provést několika z následujících způsobů:

  • - aplikaci najdete v obecném seznamu komponent pod písmenem W.
  • Pomocí vyhledávání na hlavním panelu - otevřete jej a zadejte slovo PowerShell pro vyhledávání.
  • Pomocí nabídky „Spustit“ jej spusťte kombinací Win + R a napište název nástroje, po kterém bude nalezen v systému.
  • V Commanderu nastavte akci PowerShell – měli byste ale vědět, že s aplikací budete pracovat skrz běžící čára a ne v samostatném okně.
  • V Nastavení Windows Vyberte Vlastnosti hlavního panelu a nabídku Start. Na kartě „Navigace“ zaškrtněte políčko vedle „Nahradit příkazový řádek PowerShell...“. Nyní můžete nástroj povolit pomocí kombinace Win+X.

Jak psát a spouštět skripty?

Jak vytvořit skript PowerShell a spustit jej? To lze jednoduše provést v poznámkovém bloku - pomocí něj označte příkazy, které potřebujete v novém dokumentu. Poté jej uložte, ale změňte formát na .ps1 – to je přípona, kterou mají soubory této systémové utility.

V samotné aplikaci můžete psát skripty takto:

  • Spusťte to.
  • Klikněte na položku „Vytvořit“.
  • Nebo klikněte na „Soubor“ a v zobrazeném seznamu vyberte „Vytvořit“.
  • Napište všechny příkazy, které je třeba provést, soubor uložte.

Skripty lze stále psát a upravovat ve FAR Manageru, ale nelze je přímo v takové aplikaci používat, protože soubory tohoto typu zobrazuje přes standardní cmd řádek. Ostatní akce se však provádějí stejným způsobem jako v „nativním“ nástroji.

Skript můžete spustit takto:

  1. Přihlaste se do PowerShellu jako správce.
  2. Pomocí příkazů cd zadejte umístění požadovaného souboru. Například e: cd\ cd work .\ název_souboru. Ps1 nebo e: \work\filename.ps1
  3. V tomto případě je e: jméno pevný disk kde se soubor nachází.
  4. Stiskněte Enter.

Program vám při prvním spuštění příkazu určitě zobrazí zprávu s textem „Soubor ___ .Ps1 nelze načíst, protože na tomto systému je zakázáno spouštění skriptů...“. Faktem je, že systém Windows je díky vývojářům vybaven ochranou proti rušení, takže žádný z uživatelů standardně nemá přístup k provádění takových akcí. Toto omezení lze ale velmi snadno obejít.

Jak? Text, který se zobrazí s chybou, vám doporučí zadat příkaz get-help about_signing, abyste získali další informace. Můžete postupovat podle těchto pokynů nebo použít kombinaci Set-ExecutionPolicy podepsaná na dálku - po jejím zadání bude vyžadováno potvrzení a omezení bude odstraněno.

Další otázky k použití

Mnoho lidí má otázku: jak zjistit verzi PowerShellu? Chcete-li to provést, postupujte takto:

  1. Zadejte $PSVersionTable.
  2. Pokud to k ničemu nevede, tak máte verzi 1.0 - existuje na to příkaz $host.version.
  3. Jinak se objeví detailní informace o tom, jaká verze aplikace je nainstalována na PC.

Další otázkou, která stojí za odpověď, je, jak odstranit PowerShell? To bude vyžadovat následující akce:

  • V Ovládacích panelech přejděte do nabídky Přidat nebo odebrat programy.
  • Najděte větev Microsoft Windows
  • Odinstalujte aktualizaci pro komponentu WindowsPowerShell(TM) a postupujte podle pokynů systému.

Nyní víte vše o tom, jak psát a spouštět skripty PowerShell, můžete tento příkazový řádek použít pro mnoho operací v systému. Navíc máte vždy možnost zjistit verzi tohoto produktu a dokonce ji částečně odstranit - vzhledem k tomu, že je nainstalován spolu s systémové komponenty, stále to nebude možné provést úplně. Pouze vám doporučujeme, abyste byli při provádění všech takových akcí opatrní, abyste nepoškodili počítač jako celek.

Spouštění skriptů PowerShellu podle plánu

Úkoly téměř kohokoli správce systému zahrnuje psaní různých skriptů a jejich spouštění. Naplánování spuštění skriptu podle plánu pomocí Task Sheduler není obtížný úkol, ale při používání PowerShellu existují určité nuance, o kterých budu diskutovat v tomto článku.

Řekněme tedy, že mám skript start.ps1, který potřebuji spouštět každý den po dobu 10 dnů. Tento problém lze vyřešit dvěma způsoby.

Metoda 1

Ke spuštění skriptu použijeme modul snap-in Plánovač úloh, známý také jako plánovač úloh. Najdete ho v sekci Nástroje pro správu, nebo kliknutím Win+R a zadání příkazu taskchd.msc. Otevřete plánovač a v části Akce vyberte Vytvořit úlohu.

Na záložce Obecné zadejte název a popis úlohy a v případě potřeby také uživatele, pod jehož jménem bude úloha spuštěna. Aby byla úloha provedena bez ohledu na to, zda je uživatel přihlášen do systému, vyberte možnost „Spustit, zda je uživatel přihlášen nebo ne“. Pokud je k dokončení úkolu vyžadováno zvýšení oprávnění, zaškrtněte možnost „Spustit s nejvyššími oprávněními“.

Dále přejděte na kartu Spouštěče a vytvořte nový spouštěč, ve kterém bude uložen plán spuštění pro naši úlohu. V poli Start uvedeme datum a čas zahájení a v poli Vypršení datum a čas dokončení úkolu. Označíme provádět úlohu denně (Daily) a nastavíme periodu opakování (Recur every) na 1 den.

Poznámka. Pokud chcete spouštět úlohu častěji než jednou denně, pak je třeba vybrat Jednou a v části Upřesnit nastavení vybrat položku Opakovat úlohu každých a určit dobu opakování, minimálně 5 minut, maximálně 1 hodina. Pokud to nestačí, můžete dodatečně zadat časovou prodlevu v poli Zpoždění úlohy pro až .

A to hlavní. Přejděte na kartu Akce a zadejte akci pro naplánovanou úlohu. Připomínám, že z bezpečnostních důvodů PowerShellu lze skripty spouštět pouze interaktivně, to znamená, že nejprve musíte spustit prostředí PowerShell a zadat v něm cestu ke skriptu. Proto v poli „Action“ označujeme spuštění powershell.exe a v poli „Add Arguments“ parametr -File a cestu k našemu skriptu, jako je tento:

Soubor ″C:\Scripts\start.ps1″

V poli argumentů můžete také zadat:

Příkaz – Provede zadané příkazy a další parametry. Tento parametr lze také použít ke spuštění skriptu, například: -Příkaz ″& (C:\Scripts\start.ps1)″. Kromě toho jej lze použít k předání parametrů skriptu: -Příkaz ″& (C:\Scripts\start.ps1 -a 1 -b 3)″;
-ExecutionPolicy — nastavuje zásady provádění skriptů pro aktuální relaci, může mít hodnoty Unrestricted, RemoteSigned, AllSigned a Restricted. Zadané zásady budou platné pouze v aktuální relaci a má přednost před jakýmikoli dříve vytvořenými zásadami;
-NonInteractive — zakáže výstup interaktivních požadavků na uživatele;
-WindowStyle Hidden - spustí okno PowerShellu skrytý režim, neviditelný pro uživatele;
-NoProfile - zabraňuje načítání profilu, což může poněkud urychlit provádění skriptu;
-NoExit — po spuštění skriptu ponechte shell otevřený. To může být potřeba při kontrole a ladění skriptu.

Po vyplnění požadovaných polí klikněte na OK a úkol uložte. Nyní bude skript běžet podle plánu každý den v určený čas po dobu 10 dnů.

Metoda 2

PowerShell 3.0 zavedl novou funkci naplánované úlohy, která umožňuje vytvářet naplánované úlohy přímo z konzoly bez použití modulu snap-in Plánovač. Použijme to pro plánované spuštění našeho skriptu.

Nejprve vytvoříme plán spouštění (denně v půl šesté večer, po dobu 10 dnů):

$t = New-JobTrigger –Denně –V 16:30 –DaysInterval 10

Poté přihlašovací údaje uložíme do proměnné:

$cred = Get-Credential contoso\administrator

Jako možnost určíme spuštění úlohy se zvýšenými oprávněními:

$o = New-ScheduledJobOption -RunElevated

A zaregistrujte úkol s názvem Start:

Registrovat-ScheduledJob -Název Start -FilePath C:\Scripts\start.ps1 -Trigger $t -Credential $cred -ScheduledJobOption $o

Abyste se ujistili, že byla úloha vytvořena, můžete otevřít plánovač a najít naši úlohu v sekci Microsoft\Windows\PowerShell\SheduledJobs.

Poznámka. Pro každou naplánovanou úlohu PowerShellu se v adresáři %systemdrive%\Users\%username%\AppData\Local\Microsoft\Windows\PowerShell\ScheduledJobs vytvoří složka se stejným názvem. Tato složka obsahuje samotnou úlohu v souboru XML a složku Output, ve které je v podsložkách podle času provedení uložena historie provádění úlohy - výsledek provedení (soubor Result.xml) a stav úlohy (Status.xml). Tyto soubory mohou být užitečné pro ladění a diagnostiku, pokud úloha nefunguje správně.

Zásady provádění

Na závěr mi dovolte připomenout jeden důležitý bod, a to exekuční politiku. Aktuální hodnotu zásady můžete zobrazit pomocí příkazu Get-ExecutionPolicy. Zásady provádění mohou mít následující hodnoty:

Omezeno - provádění jakýchkoli skriptů je blokováno. Výchozí hodnota;
AllSigned - je povoleno provádění skriptů s digitálním podpisem;
RemoteSigned - skripty připravené na místním počítači lze spouštět bez omezení, skripty stažené z internetu - pouze s digitálním podpisem;
Neomezené - je povoleno provádění jakýchkoli skriptů. Při spuštění nepodepsaného skriptu, který byl stažen z internetu, může program vyžadovat potvrzení;
Bypass – nic není blokováno, neobjevují se žádná varování ani požadavky.

Obvykle pro bezproblémové provádění skriptů stačí nastavit hodnotu na RemoteSigned. Aktuální hodnotu můžete změnit pomocí příkazu Set-ExecutionPolicy, například:

Set-ExecutionPolicy RemoteSigned -force

Poznámka. Pokud dojde ke konfliktu zásad provádění zadaných v příkazu skupinová politika, pak bude parametr zapsán do registru, ale nebude mít žádný účinek.

Výchozí spuštění skriptu Windows PowerShell v systému zakázáno. Z bezpečnostních důvodů musí být všechny skripty PowerShellu digitálně podepsány. tato metoda volal - exekuční politiku. Pokud skript tuto podmínku nesplňuje, provede se provedení skripty PowerShellu v systému zakázáno. Důvodem je především skutečnost, že skript může obsahovat škodlivý kód, který může poškodit operační systém.


PowerShell má několik režimů provádění, které určují, jaký typ kódu se smí spouštět. Existuje 5 různých režimů provádění:

Omezený
Výchozí hodnota. Provádění jakýchkoli skriptů je zablokováno a je povolena činnost interaktivních příkazů.
Vše podepsáno
Spouštění skriptů, které mají digitální podpis, je povoleno.
Vzdáleně podepsáno
Místní skripty fungují bez podpisu. Všechny stažené skripty musí být digitálně podepsány.
Neomezený
Spouštění jakýchkoli skriptů je povoleno. Při spuštění nepodepsaného skriptu, který byl stažen z internetu, může program vyžadovat potvrzení.
Bypass
Nic není blokováno, neobjevují se žádná varování ani požadavky.

Výchozí režim pro PowerShell je "Omezený". V tomto režimu PowerShell běží jako interaktivní prostředí. Pokud jste PowerShell předtím nenakonfigurovali, pak se místo spuštění skriptu zobrazí chybová zpráva napsaná červeným písmem jako na obrázku níže.

Nejbezpečnějším způsobem, jak tento problém vyřešit, je změnit zásadu provádění na neomezenou, spustit skript a poté změnit zpět na omezenou zásadu.

Chcete-li změnit zásadu spouštění na neomezenou, použijte konzolu PowerShell s právy správce a spusťte následující příkaz:

Y (Ano)

Nyní můžete skript spustit. Systém však vystavujete vážnému riziku, takže po dokončení skriptu nezapomeňte nastavit zásady provádění zpět do omezeného režimu. Můžete to provést pomocí následujícího příkazu:

Po spuštění příkazu budete požádáni o potvrzení změny zásad provádění. Odpovíme Y (Ano)

Provádění jakýchkoli skriptů je blokováno. Výchozí hodnota.

Set-ExecutionPolicy Restricted

Spouštění skriptů, které mají digitální podpis, je povoleno.

Skripty připravené na lokálním počítači lze spouštět bez omezení, skripty stažené z internetu – pouze pokud mají digitální podpis.

Set-ExecutionPolicy RemoteSigned

Spouštění jakýchkoli skriptů je povoleno. Při spuštění nepodepsaného skriptu, který byl stažen z internetu, může program vyžadovat potvrzení.

Set-ExecutionPolicy Unrestricted

Nic není blokováno, neobjevují se žádná varování ani požadavky.

Chcete-li spustit výše uvedené příkazy bez potvrzení změny, použijte volbu
-Force , například spusťte příkaz:

Set-ExecutionPolicy Bypass -Force

Nyní při provádění příkazů nemusíte potvrzovat provedené změny.