A Windows konfigurálása a PowerShell parancsfájlok könnyebb kezeléséhez
A Windows és a PowerShell rendelkezik beépített biztonsági funkciókkal és alapértelmezett konfigurációkkal, amelyek megakadályozzák, hogy a végfelhasználók véletlenül elindítsák a parancsfájlokat a napi tevékenységeik során. Ha azonban a napi tevékenysége rutinszerűen magában foglalja saját PowerShell szkriptek írását és futtatását, ez több kellemetlenség, mint az előny. Itt megmutatjuk, hogyan lehet ezen funkciók körül dolgozni anélkül, hogy teljesen veszélyeztetné a biztonságot.
Hogyan és miért akadályozzák meg a Windows és a PowerShell a parancsfájlok végrehajtását.
A PowerShell ténylegesen a parancsfájl és a parancsfájl nyelv, amely a CMD és a kötegelt parancsfájlok helyettesítésére szolgál a Windows rendszereken. Mint ilyen, a PowerShell szkriptje nagyjából konfigurálható úgy, hogy bármit csináljon manuálisan a parancssorból. Ez megegyezik azzal, hogy gyakorlatilag bármilyen változtatást végezhet a rendszerén, a felhasználói fiókjában érvényes korlátozásokig. Tehát, ha csak kétszer kattinthat egy PowerShell parancsfájlra, és teljes rendszergazdai jogosultságokkal futtathatja, akkor egy egyszerű, egy ilyen vonalú vonal valóban roncsolhatja a napot:
Get-ChildItem "$ env: SystemDrive" -Recurse -ErrorAction SilentlyContinue | Elem eltávolítása -Force -Recurse -ErrorAction SilentlyContinue
NE futtassa a fenti parancsot!
Ez egyszerűen átmegy a fájlrendszeren, és törli azt, amit csak tud. Érdekes, hogy ez nem teszi a rendszert a lehető leggyorsabban működésképtelenné, még akkor is, ha egy emelt ülésről indul. De ha valaki meghívja Önt a parancsfájl futtatása után, mert hirtelen nem találja meg a fájljaikat, és nem futtat néhány programot, akkor „a kikapcsolás és újra bekapcsolás” valószínűleg csak a Windows indítási javításába vezeti őket semmi, amit a probléma megoldására lehet tenni. Ami még rosszabb lenne, ahelyett, hogy szkriptet kapnánk, amely csak a fájlrendszerüket dobja ki, a barátod esetleg becsapódhat egy olyan program futásába, amely letölti és telepíti a keylogger vagy távoli hozzáférési szolgáltatást. Aztán ahelyett, hogy kérdéseket tennél fel az indítási javítással kapcsolatban, a bankok csalással kapcsolatos kérdéseit esetleg a rendőrségtől kérdezhetik!
Mostanáig nyilvánvaló, hogy miért van szükség bizonyos dolgokra, hogy megvédjék a végfelhasználókat maguktól. De a hatalomfelhasználók, a rendszergazdák és más geekek általában (bár vannak kivételek) kissé óvatosabbak ezekre a fenyegetésekre, tudva, hogy hogyan kell helyet találni és könnyen elkerülni őket, és csak azt akarják, hogy folytassák munkájukat. Ehhez le kell tiltaniuk, vagy néhány útblokk körül kell dolgozniuk:
- A PowerShell nem engedélyezi a külső szkriptek végrehajtását alapértelmezés szerint.
A PowerShell ExecutionPolicy beállítása megakadályozza a külső szkriptek alapértelmezett végrehajtását a Windows minden verziójában. Egyes Windows verziókban az alapértelmezett nem engedi meg a szkript végrehajtását. Megmutattuk, hogyan módosíthatja ezt a beállítást a PowerShell parancsfájlok végrehajtásának engedélyezése Windows 7 rendszeren, de néhány szinten is lefedjük azt. - A PowerShell alapértelmezés szerint nem kapcsolódik a .PS1 fájlkiterjesztéshez.
Ezt először a PowerShell Geek Iskolai sorozatunkban hoztuk létre. A Windows beállítja az .PS1 fájlok alapértelmezett műveletét a Jegyzettömbben való megnyitásukra, ahelyett, hogy elküldné őket a PowerShell parancsértelmezőnek. Ennek célja, hogy közvetlenül megakadályozza a rosszindulatú szkriptek véletlenszerű végrehajtását, amikor egyszerűen duplán kattintanak. - Néhány PowerShell parancsfájl nem működik rendszergazdai engedély nélkül.
Még egy rendszergazdai szintű fiókkal is futhat, még mindig be kell mennie a felhasználói fiókok felügyeletén (UAC), hogy bizonyos műveleteket hajtson végre. A parancssori eszközök esetében ez egy kicsit nehézkes lehet. Nem akarjuk letiltani az UAC-t, de még mindig jó, ha egy kicsit könnyebb kezelni.
Ugyanezeket a kérdéseket felvetődik a Hogyan használhatok egy kötegfájlt a PowerShell parancsfájlok könnyebb futtatásához, ahol egy kötegfájl írásával járunk el, hogy átmenetileg körülveszi őket. Most megmutatjuk, hogyan állíthatod be a rendszeredet egy hosszabb távú megoldással. Ne feledje, hogy ezeket a változtatásokat általában nem csak olyan rendszerekben kell elvégeznie, amelyeket nem kizárólag Ön használ..
A .PS1 fájl társítása módosítása.
Az első, és talán leginkább bosszúság, hogy megkerüljék, az .PS1 fájlok alapértelmezett társítása. Ezeknek a fájloknak a társítása a PowerShell.exe-n kívül más, mint a nem kívánt szkriptek véletlenszerű végrehajtásának megakadályozása. Mivel azonban a PowerShell egy integrált parancsfájl-környezetet (ISE) tartalmaz, amelyet kifejezetten a PowerShell szkriptek szerkesztésére terveztek, miért szeretnénk alapértelmezésben megnyitni a .PS1 fájlokat a Jegyzettömbben? Még ha nem is áll készen arra, hogy teljes mértékben átkapcsoljon a kettős kattintással működő funkciók engedélyezésére, valószínűleg meg szeretné változtatni ezeket a beállításokat.
Megváltoztathatja a .PS1 fájl társítását a kívánt programokhoz az Alapértelmezett programok vezérlőpultjával, de közvetlenül a rendszerleíró adatbázisba ásni tud egy kicsit jobban ellenőrizni, hogyan fogják megnyitni a fájlokat. Ez azt is lehetővé teszi, hogy további beállításokat állítson be vagy módosítson, amelyek a .PS1 fájlok kontextus menüjében érhetők el. Ne felejtse el biztonsági másolatot készíteni a rendszerleíró adatbázisról, mielőtt ezt megtenné!
A PowerShell parancsfájlok megnyitását szabályozó rendszerleíró beállítások a következő helyen tárolódnak:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
Ha ezeket a beállításokat szeretnénk megvizsgálni, mielőtt át akarjuk változtatni őket, nézd meg ezt a kulcsot és annak al-kulcsait a Regedit-tel. A Shell kulcsnak csak egy értékkel kell rendelkeznie: „(Alapértelmezett)”, amely „Open” értékre van állítva. Ez egy olyan mutató az alapértelmezett műveletre, amelyre duplán kattint a fájlra, amelyet az al-kulcsokban láthatunk.
Bontsa ki a Shell kulcsot, és három al-kulcsot lát. Ezek mindegyike olyan műveletet jelent, amelyet a PowerShell szkriptekre jellemző.
Bővítheti az egyes kulcsokat az értékek felfedezéséhez, de alapvetően az alábbi alapértelmezett értékekkel egyenlő:
- 0 - Futtassa a PowerShell segítségével. A „Futtatás PowerShell-lel” valójában a PowerShell-parancsfájlok helyi menüjében található opció neve. A szöveg csak egy másik helyről húzódik ahelyett, hogy a kulcsnevet használja, mint a többi. És ez még mindig nem az alapértelmezett dupla kattintással végzett művelet.
- Szerkesztés - Megnyitás a PowerShell ISE-ben. Ez sokkal érthetőbb, mint a Jegyzettömb, de még mindig jobb egérgombbal kattintson a .PS1 fájlra, hogy alapértelmezés szerint tegye.
- Megnyitás - Megnyitás a Jegyzettömbben. Ne feledje, hogy ez a kulcsnév a Shell kulcs „(Alapértelmezett)” értékében tárolt karakterlánc. Ez azt jelenti, hogy a fájl dupla kattintása „Megnyitja”, és a művelet általában a Jegyzettömb használatára van beállítva.
Ha meg akarja ragadni a már rendelkezésre álló előre épített parancsstringeket, akkor egyszerűen megváltoztathatja a „(Alapértelmezett)” értéket a Shell billentyűben, hogy megfeleljen annak a kulcsnak a nevére, amely megfelel a kettős kattintással végzett műveletnek. Ez könnyen elvégezhető a Regedit-en belül, vagy használhatja a bemutatóból megtanult tanulságokat a rendszerleíró adatbázis felfedezéséhez a PowerShell-rel (plusz egy kis PSDrive csípés), hogy megkezdhesse egy újrafelhasználható szkript létrehozását, amely konfigurálhatja a rendszereket az Ön számára. Az alábbi parancsokat egy emelt PowerShell munkamenetből kell futtatni, hasonlóan a CMD rendszergazdaként történő futtatásához.
Először is szeretné beállítani a PSDrive-t HKEY_CLASSES_ROOT számára, mivel ez alapértelmezés szerint nincs beállítva. Ennek a parancs:
Új-PSDrive HKCR rendszerleíró adatbázis HKEY_CLASSES_ROOT
Most már a HKEY_CLASSES_ROOT rendszerben a rendszerleíró kulcsok és értékek navigálhatók és szerkeszthetők, mint a rendszeres HKCU és a HKLM PSDrives-ben.
A PowerShell parancsfájlok közvetlen indításához kattintson duplán:
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell (alapértelmezett) '0
A PowerShell parancsfájlok megnyitásához kattintson duplán a PowerShell ISE programban:
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell (alapértelmezett) "Szerkesztés"
Az alapértelmezett érték visszaállítása (dupla kattintással állítja be a PowerShell parancsfájlokat a Jegyzettömbben):
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell (alapértelmezett) "Open"
Ez csak az alapértelmezett dupla kattintással végzett művelet módosításának alapjai. A PowerShell szkriptek kezelésének részletesebb leírása a PowerShellben az Explorer böngészőből a következő részben jelenik meg. Ne feledje, hogy az alkalmazási kör megakadályozza, hogy a PSDrives megmaradjanak a szekciókban. Tehát valószínűleg szeretné, hogy az új-PSDrive vonalat olyan konfigurációs szkript elején helyezze el, amelyet ehhez a célra épített, vagy hozzáadja a PowerShell profiljához. Ellenkező esetben manuálisan kell futtatnia a bitet, mielőtt ilyen módon megpróbálná változtatni.
A PowerShell ExecutionPolicy beállítás módosítása.
A PowerShell ExecutionPolicy egy másik védelmi réteg a rosszindulatú parancsfájlok végrehajtása ellen. Ehhez több lehetőség áll rendelkezésre, és pár különböző módon állítható be. Leginkább a legkevésbé biztonságosakhoz a rendelkezésre álló lehetőségek:
- Korlátozott - A parancsfájlok nem futtathatók. (A legtöbb rendszer alapértelmezett beállítása.) Ez még megakadályozza, hogy a profilszkript futjon.
- AllSigned - Minden szkriptet egy megbízható kiadónak digitálisan alá kell írnia ahhoz, hogy a felhasználó megkérdezése nélkül fusson. Azok a kiadók által aláírt szkriptek, amelyeket kifejezetten megbízhatatlannak minősítettek, vagy a digitálisan nem aláírt szkriptek nem fognak futni. A PowerShell felszólítja a felhasználót a megerősítésre, ha egy scriptet egy olyan kiadó ír alá, amely még nem minősül megbízhatónak vagy nem megbízhatónak. Ha még nem írta alá digitálisan a profilszkriptjét, és nem bízott meg abban az aláírásban, akkor nem fog futni. Legyen óvatos, hogy melyik kiadókra bízik, hiszen még mindig rosszindulatú parancsfájlokat futtathat, ha bízik bajban.
- RemoteSigned - Az internetről letöltött parancsfájlok esetében ez ugyanaz, mint az „AllSigned”. A helyileg létrehozott vagy az internettől eltérő forrásokból importált szkriptek azonban jóváhagyási felszólítás nélkül futtathatók. Itt is óvatosnak kell lennie, hogy melyik digitális aláírást bízza meg, de vigyázzon a nem aláírt parancsfájlokra, amelyeket futtat. Ez a legmagasabb biztonsági szint, amellyel munkaprofil-szkriptet lehet használni anélkül, hogy ezt digitálisan alá kellene írnia.
- Korlátlan - Minden parancsfájl futtatható, de az internetről érkező parancsfájlokhoz egy megerősítő kérés szükséges. Ettől kezdve teljesen rajtad múlik, hogy elkerüljük a megbízhatatlan szkriptek futtatását.
- Bypass - Minden fut figyelmeztetés nélkül. Légy óvatos ezzel.
- Nincs meghatározva - az aktuális hatókörben nincs meghatározva irányelv. Ez lehetővé teszi az alacsonyabb alkalmazási körökben definiált irányelvek (további részletek) vagy az operációs rendszer alapértelmezett beállításainak visszaállítását.
Amint azt a Nem definiált leírás leírja, a fenti irányelvek egy vagy több hatókörben állíthatók be. A Get-ExecutionPolicy használatával a -List paraméterrel láthatja az összes hatókört és az aktuális konfigurációt.
A hatókörök elsőbbségi sorrendben vannak felsorolva, a legmagasabb meghatározó hatókör pedig minden másat felülír. Ha nincs meghatározva irányelv, a rendszer visszaáll az alapértelmezett beállításra (a legtöbb esetben ez korlátozott).
- A MachinePolicy képviseli a Számítógép-szinten érvényes Csoportházirendet. Ezt általában csak egy tartományban alkalmazzák, de helyben is elvégezhető.
- A UserPolicy egy olyan csoportházirendet jelent, amely a felhasználóra érvényes. Ezt általában csak a vállalati környezetben használják.
- A folyamat a PowerShell ezen példányára jellemző terület. Az irányelv hatálya alá tartozó változtatások nem befolyásolják a futó PowerShell folyamatokat, és a szekció befejezése után hatástalanok lesznek. Ezt a -ExecutionPolicy paraméterrel lehet beállítani, amikor a PowerShell elindul, vagy beállítható a megfelelő Set-ExecutionPolicy szintaxissal a munkamenetből.
- A CurrentUser egy olyan tartomány, amely a helyi rendszerleíró adatbázisban van beállítva, és a PowerShell indításához használt felhasználói fiókra vonatkozik. Ez a hatókör módosítható a Set-ExecutionPolicy segítségével.
- A LocalMachine a helyi rendszerleíró adatbázisban beállított hatókör, amely a rendszer összes felhasználójára vonatkozik. Ez az alapértelmezett tartomány, amely megváltozik, ha a Set-ExecutionPolicy futtatása a -Scope paraméter nélkül történik. Mivel a rendszer minden felhasználójára vonatkozik, csak egy magas szintű munkamenetből lehet változtatni.
Mivel ez a cikk elsősorban a biztonság megszerzéséről szól, hogy megkönnyítse a használhatóságot, csak aggódunk az alsó három területről. A MachinePolicy és a UserPolicy beállítások csak akkor hasznosak, ha egy olyan korlátozó politikát szeretne érvényesíteni, amely nem egyszerűen megkerülhető. Azáltal, hogy változásunkat a folyamat szintjén vagy annál alacsonyabb szinten tartjuk, bármikor könnyen használhatjuk az adott helyzethez megfelelőnek tartott politikai beállításokat.
A biztonság és a használhatóság közötti egyensúly megőrzése érdekében a képernyőn megjelenő irányelv valószínűleg a legjobb. A LocalMachine házirend korlátozásként történő beállítása általában megakadályozza, hogy bárki más, mint te, futtassa a parancsfájlokat. Természetesen ezt megkerülhetik azok a felhasználók, akik tudják, mit tesznek anélkül, hogy nagy erőfeszítés nélkül. De meg kell őriznie a nem technikás felhasználókat abban, hogy véletlenül valamilyen katasztrófát okozzanak a PowerShell-ben. Ha a CurrentUser (azaz: te) Unrestricted-ként van beállítva, akkor manuálisan is végrehajthatja a parancsfájlokat a parancssorból, de megtartja az Internetről letöltött parancsfájlok figyelmeztetését. A processz szintjén a RemoteSigned beállítást a PowerShell.exe parancsikonjával vagy a PowerShell parancsfájlok viselkedését vezérlő értékekben lévő parancsikonban kell elvégezni. Ez lehetővé teszi, hogy minden írott szkriptek számára megkönnyítsük a duplán kattintással működő funkciókat, miközben erősebb korlátot állítanak elő a külső forrásokból származó (potenciálisan rosszindulatú) szkriptek véletlenszerű végrehajtása ellen. Ezt azért szeretnénk tenni, mert sokkal könnyebb a véletlenszerűen duplán kattintani egy parancsfájlra, mint általában egy interaktív munkamenetből történő kézi hívása.
A CurrentUser és LocalMachine házirendek beállításához, mint a fenti képen, futtassa a következő parancsokat egy magasabb PowerShell munkamenetből:
Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser
A RemoteSigned házirend az Explorer böngészőből futó parancsfájljain történő érvényesítéséhez meg kell változtatnunk egy korábban regisztrált kulcskulcson belüli értéket. Ez különösen fontos, mivel a PowerShell vagy a Windows verziótól függően az alapértelmezett konfiguráció az AllSigned kivételével az összes ExecutionPolicy beállítás megkerülése. Ha meg szeretné tekinteni, hogy mi a jelenlegi konfiguráció a számítógépre, futtathatja ezt a parancsot (győződjön meg róla, hogy a HKCR PSDrive először leképezve van):
Get-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell parancs | Objektum kiválasztása (alapértelmezett)
Az alapértelmezett konfiguráció valószínűleg az alábbi két karakterlánc egyike lesz, vagy valami hasonló:
(Windows 7 SP1 x64 rendszeren, PowerShell 2.0-val)
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-file"% 1 "
(Windows 8.1 x64 rendszeren, a PowerShell 4.0-al)
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-Command" "ha ((Get-ExecutionPolicy) -ne 'AllSigned') Set-ExecutionPolicy -Scope Process Bypass; & '% 1 ”
Az első nem túl rossz, hiszen mindent a meglévő ExecutionPolicy beállítások alatt hajt végre. Jobb lehet, ha szigorúbb korlátozásokat vezet be a balesetre hajlamosabb cselekvésekre, de ez eredetileg nem volt kettős kattintással indítható, és az alapértelmezett irányelvek általában korlátozottak. A második lehetőség azonban egy teljes körű áthidalás, bármi is legyen az ExecutionPolicy-nál, még akkor is, ha korlátozott. Mivel a bypass-ot a Process hatókörben fogjuk alkalmazni, ez csak azokra a munkamenetekre vonatkozik, amelyek akkor indítódnak el, amikor a parancsfájlokat az Explorer programból futtatja. Ez azonban azt jelenti, hogy végül olyan parancsfájlokat indíthat el, amelyeket egyébként elvárhat (és szeretné) az Ön politikájától.
Ahhoz, hogy a Folyamatszintű végrehajtásPolicy-t az Explorer-ből indított parancsfájlokra állítsa be, a fenti képernyőképnek megfelelően módosítanunk kell ugyanazokat a rendszerleíró értékeket, amelyeket éppen lekérdeztünk. A Regeditben manuálisan is megteheti, ezzel megváltoztatva:
"C: Windows System32 WindowsPowerShell1.0 powerhell.exe" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
A beállítást a PowerShell-en belül is módosíthatja, ha tetszik. Ne felejtsd el ezt egy megemelt munkamenetből elvégezni, a HKCR PSDrive leképezésével.
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell parancs (alapértelmezett) "C: Windows System32 WindowsPowerShell v1.0 powershell.exe" "-ExecutionPolicy" "Távoli aláírás" "-file" " % 1" ”
Futtassa a PowerShell parancsfájlokat rendszergazdaként.
Csakúgy, mint egy rossz ötlet, hogy teljesen tiltsa le az UAC-t, az is rossz biztonsági gyakorlat, ha parancsfájlokat vagy programokat futtat meg, ha nem szükséges, hogy olyan műveleteket hajtson végre, amelyekhez adminisztrátori hozzáférés szükséges. Tehát nem ajánlott az UAC parancsot a PowerShell szkriptek alapértelmezett műveletére építeni. Új kontextus menüpontot adhatunk hozzá, hogy lehetővé tegyük, hogy a parancsfájlokat magas szintű munkamenetekben futtassuk. Ez hasonlít a „Open with Notepad” hozzáadásához az összes fájl kontextus menüjéhez, de itt csak a PowerShell szkriptekre fogunk irányítani. Az előző cikkben használt technikákat is átvisszük, ahol a rendszerleíró adatbázis helyett egy kötegfájlt használtunk, hogy elindítsuk a PowerShell szkriptünket.
Ehhez a Regeditben térjen vissza a Shell kulcsba:
HKEY_CLASSES_ROOT \ Microsoft.PowerShellScript.1 \ Shell
Itt hozzon létre egy új al-kulcsot. Hívja „Futtassa PowerShell-lel (Admin)”. Ez alatt hozzon létre egy újabb al-kulcsot, a „Parancs” -t. Ezután állítsa be a „(Alapértelmezett)” értéket a Command alatt:
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "" "" "" & Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File \ t ”
Ugyanezt kell tennie a PowerShell-ben három alkalommal. Mindegyik új kulcshoz, és az egyik a „(Alapértelmezett)” érték beállításához. Ne felejtsük el a magasságot és a HKCR leképezést.
Újdonság 'HKCR: Microsoft.PowerShellScript.1 Shell PowerShell (Admin)' újdonság 'HKCR: Microsoft.PowerShellScript.1 Shell PowerShell használatával (Admin))' Set-ItemProperty 'parancs HKCR: Microsoft.PowerShellScript.1 Shell PowerShell segítségével (Admin) Parancs "(Alapértelmezett)" "C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "" "" "" & Start-Process PowerShell.exe -ArgumentList "-ExecutionPolicy RemoteSigned - Fájl"% 1 "" - Verb RunAs ""
Továbbá ügyeljen a PowerShell-en keresztül bevezetett karakterlánc és a rendszerleíró adatbázisba belépő tényleges érték közötti különbségekre. Különösen, az egészet egyszeres idézőjelekbe kell csomagolni, és a belső egyéni idézetekre duplázni kell, hogy elkerüljük a parancsok elemzésében fellépő hibákat.
Most új kontextus-menüpontot kell kapnia a PowerShell parancsfájlokhoz, az úgynevezett „Futtatás PowerShell-lel (Admin)”.
Az új opció két egymást követő PowerShell példányt eredményez. Az első csak egy hordozó a második számára, amely a Start-Process-et használja a „-Verb RunAs” paraméterrel az új munkamenet megemelésére. Innen a parancsfájlnak képesnek kell lennie arra, hogy rendszergazdai jogosultságokkal fusson, miután rákattintott az UAC parancssorra.
Utolsó simítások.
Van még pár pár, ami segíthet az élet kicsit könnyebbé tenni. Egyrészt hogyan lehet teljesen megszabadulni a Jegyzettömb funkciótól? Egyszerűen másolja a „(Alapértelmezett)” értéket a Szerkesztés (lenti) alatt lévő Parancsgombból, ugyanabban a helyre, mint az Open.
"C: Windows System32 WindowsPowerShell v1.0 powerhell_ise.exe" "% 1"
Vagy használhatja ezt a kicsit a PowerShell-et (természetesen Admin & HKCR):
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell Open Command '(alapértelmezett) "" C: Windows System32 WindowsPowerShell v1.0 powerhell_ise.exe ""% 1 "
Még egy kisebb bosszúság a konzol szokása, hogy egy script befejezése után eltűnik. Amikor ez megtörténik, nincs esélyünk a szkript kimenetének a hibák vagy más hasznos információk ellenőrzésére. Ezt úgy lehet kezelni, hogy szünetet állítunk be minden egyes szkriptek végén. Alternatívaként módosíthatjuk a „(Alapértelmezett)” értékeket a Command gombjainkhoz, hogy a „-NoExit” paramétert be lehessen foglalni. Az alábbiakban a módosított értékek találhatók.
(Adminisztrátori hozzáférés nélkül)
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" "-file" "% 1"
(Adminisztrátori hozzáféréssel)
"C: Windows System32 WindowsPowerShell v1.0 powerhell.exe" "" "" "" & Start-Process PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File \ t Verb RunAs "
Természetesen a PowerShell parancsokban is megadjuk. Utolsó emlékeztető: Elevation & HKCR!
(Nem Admin)
Set-ItemProperty HKCR: Microsoft.PowerShellScript.1 Shell parancs (alapértelmezett) "C: Windows System32 WindowsPowerShell v1.0 powershell.exe" "-NoExit" "-ExecutionPolicy" "RemoteSigned" " -file "% 1" '
(Admin)
Set-ItemProperty 'HKCR: Microsoft.PowerShellScript.1 Shell PowerShell (Admin) használatával "(" Alapértelmezett ")" C: Windows System32 WindowsPowerShell v1.0 powerhell.exe "" -Command " "" & Start-Process PowerShell.exe -ArgumentList "-NeExit -ExecutionPolicy RemoteSigned -File \ t
Egy centrifugáláshoz.
Ennek teszteléséhez olyan parancsfájlt fogunk használni, amely megmutatja nekünk az ExecutionPolicy beállításokat, és hogy a parancsfájl rendszergazdai engedélyekkel indult-e el. A parancsfájlt „MyScript.ps1” -nek nevezzük, és a „D: Script Lab” programban tároljuk. A kód az alábbiakban olvasható.
ha (([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity] :: GetCurrent ()) IsInRole ([Security.Principal.WindowsBuiltInRole] "Adminisztrátor")) Írás-kimenet "Futtatás rendszergazdaként!" Írás-kimenet korlátozott! ” Get-ExecutionPolicy -List
A „Run with PowerShell” művelet használata:
A „Futtatás PowerShell (Admin)” művelettel az UAC-on való kattintással:
Ahhoz, hogy a FuttatásPolitikai folyamatot a folyamatkörnyezetben mutassa be, a Windows úgy gondolja, hogy a fájl ebből a PowerShell kóddal érkezett az internetről:
Add-Content -D 'D: script Lab MyScript.ps1' -Value "[ZoneTransfer] 'nZoneId = 3" -Stream "Zone.Identifier"
Szerencsére a -NeExit engedélyezve volt. Ellenkező esetben ez a hiba csak villogott volna, és nem tudtuk volna!
A Zone.Identifier eltávolítható ezzel:
Clear-Content -P 'D: Szkriptlabda MyScript.ps1' -Stream 'Zone.Identifier'
Hasznos hivatkozások:
- PowerShell parancsfájlok futtatása egy kötegelt fájlból - Daniel Schroeder programozási blogja
- Rendszergazdai jogosultságok ellenőrzése a PowerShell-ben - Hé, Scripting Guy! blog