Z několika důvodů většinou skript PowerShell, který se týká zabezpečení, není tak snadno přenosný a použitelný jako dávkové skripty. Můžeme však spojit dávkový skript s našimi skripty PowerShell, abychom tyto problémy vyřešili. Zde budeme ukázat některé z těchto problémových oblastí a vytvářet dávkový skript, který je obklopuje.
Pokud není cílový systém předem nakonfigurován tak, aby umožňoval spouštění libovolných skriptů s požadovanými oprávněními a pomocí správných nastavení, pravděpodobně narazíte na některé problémy při pokusu o to.
Začněme řešením prvního problému - sdružení souborů .PS1. Nemůžete dvakrát kliknout na spuštění souborů .PS1, ale můžete spustit soubor .bat tímto způsobem. Takže napíšeme dávkový soubor, který nám zavolá skript PowerShell z příkazového řádku.
Takže nemusíme přepisovat dávkový soubor pro každý skript nebo pokaždé, když přesučíme skript, použije proměnnou pro vlastní odkaz a vytvoří cestu k souboru pro skript PowerShell. Chcete-li to provést, dávkový soubor bude muset být umístěn ve stejné složce jako skript PowerShell a mít stejný název souboru. Pokud se tedy skript PowerShell nazývá "MyScript.ps1", budete chtít pojmenovat dávkový soubor "MyScript.bat" a ujistěte se, že je ve stejné složce. Pak vložte tyto řádky do dávkového skriptu:
@CHO OFF PowerShell.exe -Command "&"% ~ dpn0.ps1 " PAUSE
Pokud by nebyly platné ostatní bezpečnostní omezení, opravdu stačí spustit skript PowerShell z dávkového souboru. První a poslední řádky jsou ve skutečnosti jen otázkou preference - je to druhá linka, která opravdu dělá práci. Zde je rozdělení:
@CHO OFF vypne příkaz echoing. To pouze udržuje ostatní příkazy zobrazené na obrazovce při spuštění dávkového souboru. Tento řádek je sám skrytý použitím symbolu @ (@) před ním.
PowerShell.exe -Command "&"% ~ dpn0.ps1 " ve skutečnosti spouští skript PowerShell. PowerShell.exe lze samozřejmě volat z libovolného okna CMD nebo dávkového souboru a spustit PowerShell na holou konzolu jako obvykle. Můžete jej také použít k spuštění příkazů přímo z dávkového souboru, včetně parametru -Command a příslušných argumentů. Způsob, jakým se používá k cílení na náš soubor .PS1, je se speciální proměnnou% ~ dpn0. Spustit z dávkového souboru,% ~ dpn0 se vyhodnotí na písmeno jednotky, cestu ke složce a název souboru (bez přípony) dávkového souboru. Vzhledem k tomu, že dávkový soubor a skript PowerShell budou ve stejné složce a budou mít stejný název, aplikace% ~ dpn0.ps1 bude převedena na cestu k úplnému souboru skriptu PowerShell.
PAUSE právě pozastaví provádění dávky a čeká na vstup uživatele. To je obecně užitečné mít na konci vašeho dávkového souboru, takže máte šanci přezkoušet jakýkoli výstup příkazu dříve, než zmizí okno. Během testování každého kroku bude užitečnější zřejmé.
Takže je nastaven základní dávkový soubor. Pro demonstrační účely je tento soubor uložen jako "D: Script Lab MyScript.bat" a ve stejné složce je "MyScript.ps1". Uvidíme, co se stane, když dvakrát klikneme na MyScript.bat.
Skript PowerShell se nečekal, ale to se dá očekávat - koneckonců jsme se zabývali pouze prvním z našich čtyř problémů. Existují zde však některé důkazy:
Profil je v tomto případě jednoduchý jednorázový skript používaný pro tuto ukázku pro generování výstupu vždy, když je profil aktivní. Můžete také přizpůsobit svůj vlastní profil PowerShell, pokud chcete otestovat tyto skripty sami. Jednoduše přidejte následující řádek do svého profilového skriptu:
Write-Output "Vlastní profil PowerShell účinně!"
ExecutionPolicy v testovacím systému je nastaven na RemoteSigned. To umožňuje provádět lokálně vytvořené skripty (například profilový skript), zatímco blokují skripty z externích zdrojů, pokud nejsou podepsané důvěryhodným orgánem. Pro ukázkové účely byl použit příkaz, který má označit MyScript.ps1 jako z externího zdroje:
Add-Content -Path "D: Script Lab MyScript.ps1" -Value "[ZoneTransfer] 'nZoneId = 3 "-Stream 'Zone.Identifier'
Tím se nastaví alternativní datový proud Zone.Identifier na MyScript.ps1 tak, aby si systém Windows myslel, že soubor pochází z Internetu. Může být snadno obrácen pomocí následujícího příkazu:
Clear-Content -Path "D: Script Lab MyScript.ps1 '-Stream' Zone.Identifier '
PowerShell.exe -ExecutionPolicy Bypass -Command "&"% ~ dpn0.ps1 "
Parametr -ExecutionPolicy může být použit k úpravě ExecutionPolicy, která se používá při spuštění nové relace PowerShell. To nebude trvat i po této relaci, takže můžeme takhle PowerShell spustit, kdykoli potřebujeme, aniž bychom oslabili obecnou bezpečnostní pozici systému. Nyní, když jsme to opravili, pojďme jít dál:
Nyní, když skript řádně provedl, můžeme vidět, co vlastně dělá. Dává nám vědět, že používáme tento skript jako omezený uživatel. Skript je ve skutečnosti spuštěn pomocí účtu s oprávněním správce, avšak uživatelský účet kontroluje. Ačkoli podrobnosti o tom, jak skript kontroluje přístup správce, jsou mimo rozsah tohoto článku, je zde kód, který se používá pro demonstraci:
pokud (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetInterface ()) IsInRole ([Security.Principal.WindowsBuiltInRole] "Administrator")) {Write-Output 'Spuštěn jako správce!'} Else {Write-Output 'Running Limited! že ve výstupu skriptu existují dvě operace "Pozastavit" - jednu ze skriptu PowerShell a jednu ze dávkového souboru. Důvod pro to bude více zřejmý v dalším kroku
Krok 3: Získání přístupu administrátora
Pokud váš skript nespustí žádné příkazy, které vyžadují elevaci a jste si jistý, že nebudete mít abyste se obávali, že se někdo dostane do cesty, můžete vynechat zbytek. Pokud však používáte některé cmdletníky na úrovni správce, budete potřebovat tento kus
PowerShell.exe -Command "& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy Bypass -Soubor" "% ~ dpn0.ps1" "' Verb RunAs} "
Když je dávkový soubor spuštěn, první řádek výstupu, který uvidíme, je z skriptu profilu PowerShell. Potom se po spuštění aplikace Start-Process pokusí spouštět MyScript.ps1 výzva UAC
Po kliknutí na výzvu UAC se objeví nová instance PowerShell. Vzhledem k tomu, že se jedná o novou instanci, samozřejmě se opět zobrazí upozornění na profilový skript. Potom běží MyScript.ps1 a vidíme, že jsme skutečně ve zvýšené relaci. A to je důvod, proč tu máme také dvě pauzy. Pokud tomu tak není v skriptu PowerShell, nikdy bychom neviděli výstup skriptu - okno PowerShell by se objevilo a zmizelo, jakmile je skript hotový. A bez pauzy v dávkovém souboru bychom nebyli schopni zjistit, zda došlo k chybám spouštění PowerShellu.
Krok 4: Získání vlastních profilů PowerShell.
Pojďme se zbavit toho hnusného oznámení vlastní profil nyní, my? Tady je sotva obtížné, ale pokud uživatelský profil PowerShell změní výchozí nastavení, proměnné nebo funkce způsobem, který pravděpodobně neočekáváte ve vašem skriptu, mohou to být opravdu obtížné. Je to mnohem jednodušší spouštět svůj skript bez profilu úplně, takže se o to nemusíte bát. Chcete-li to udělat, stačí změnit druhý řádek dávkového souboru ještě jednou:
PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File" "% ~ dpn0.ps1" "-Verb RunAs}"
Pokud v skriptu PowerShell nepotřebujete práva správce a vy jste vynechali krok 3, můžete to udělat bez druhé instance PowerShell a druhý řádek dávkového souboru by měl vypadat takto:
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "&"% ~ dpn0.ps1 "
Výstup bude vypadat takto:
( Samozřejmě, že pro skripty bez administrátorů byste mohli udělat bez pauzy na konci skriptu ve vašem skriptu PowerShell, protože vše je zachyceno ve stejném okně konzoly a bude se tam konat pauzou na konci dávkový soubor stejně.)
Dokončené dávkové soubory
V závislosti na tom, zda potřebujete oprávnění administrátora pro váš skript PowerShell (a opravdu byste je neměli žádat, pokud nemáte), měl by vypadat poslední dávkový soubor jako je jeden z níže uvedených.
Bez přístupu správce:
S administrátorským přístupem:
@ECHO OFF PowerShell.exe -NoProfile -Command "& {Start-Process PowerShell.exe -ArgumentList '-NoProfile - ExecutionPolicy Bypass -File "% ~ dpn0.ps1 " '-Verb RunAs} "PAUSE
Nezapomeňte dát dávkový soubor do stejného adresáře jako skript PowerShell, který jej chcete použít, a dejte mu stejný název . Poté, bez ohledu na to, do kterého systému tyto soubory přejdete, budete moci spustit váš skript PowerShell, aniž byste se museli vypořádat s některými bezpečnostními nastaveními systému. Tyto změny můžete určitě provést ručně pokaždé, ale to vám ušetří potíže a nebudete se muset starat o to, abyste později změnili změny.
Odkazy:
Spouštění PowerShellových skriptů z dávkového souboru - programovací blog společnosti Daniel Schroeder
Kontrola oprávnění administrátora v PowerShell - Hej, skriptování Guy! Blog
Jak udržet příkaz Command + Q na "Pomalé ukončení" Aplikace v MacOS
Chcete-li aplikaci ukončit na počítači Mac, stačí stisknout klávesu Command + Q na klávesnici. To však může vést k neúmyslným následkům, a to náhodnému ukončení aplikací, pokud jsou vaše prsty na nesprávném místě. SOUVISEJÍCÍ: Jak změnit klávesovou zkratku Cmd + Q v operačním systému OS X (k zastavení náhodného zavření aplikací) Chvilku zpátky Chrome představil funkci, která vám umožní přejít na "pomalé ukončení" a vyžaduje, abyste několik sekund drželi Command + Q, než aplikace skutečně skončí.
Google vytvoří vlastní případ pro váš Nexus, ale není to tak skvělý
Každý, kdo používá telefonní případ, chce něco, co se jim opravdu líbí. Takže přizpůsobené telefonní pouzdro s obrazem podle vašeho výběru zní jako neuspokojení, ne? To je přesně to, co Google dělá se společností Live Cases - novým produktem $ 35 pro zařízení Nexus 6, Nexus 5X a Nexus 6P, které uživatelům umožňují zcela přizpůsobit vzhled telefonního pouzdra fotografii nebo mapě.