A Windows beállítása a PowerShell szkriptekkel való könnyebb kezelés érdekében

Tartalomjegyzék:

A Windows beállítása a PowerShell szkriptekkel való könnyebb kezelés érdekében
A Windows beállítása a PowerShell szkriptekkel való könnyebb kezelés érdekében

Videó: A Windows beállítása a PowerShell szkriptekkel való könnyebb kezelés érdekében

Videó: A Windows beállítása a PowerShell szkriptekkel való könnyebb kezelés érdekében
Videó: WPA2 Wi-Fi Vulnerable to KRACK Hack; RSA Keys Broken - ThreatWire - YouTube 2024, Lehet
Anonim
A Windows és a PowerShell beépített biztonsági funkciókkal és alapértelmezett konfigurációkkal rendelkezik, amelyek célja, hogy megakadályozzák a végfelhasználók véletlenszerű forgatókönyveket indítanak napi tevékenységeik során. Ha azonban napi tevékenységei rendszerint magukban foglalják a saját PowerShell szkriptek írását és működtetését, akkor ez inkább kellemetlenség, mint előny. Itt megmutatjuk Önnek, hogyan kell ezeket a szolgáltatásokat megcsinálni anélkül, hogy teljesen veszélyeztetné a biztonságot.
A Windows és a PowerShell beépített biztonsági funkciókkal és alapértelmezett konfigurációkkal rendelkezik, amelyek célja, hogy megakadályozzák a végfelhasználók véletlenszerű forgatókönyveket indítanak napi tevékenységeik során. Ha azonban napi tevékenységei rendszerint magukban foglalják a saját PowerShell szkriptek írását és működtetését, akkor ez inkább kellemetlenség, mint előny. Itt megmutatjuk Önnek, hogyan kell ezeket a szolgáltatásokat megcsinálni anélkül, hogy teljesen veszélyeztetné a biztonságot.

A Windows és a PowerShell hogyan és miért akadályozzák a szkript végrehajtását.

A PowerShell valójában a parancssori és parancsfájl-nyelv, amely a CMD és a kötegelt szkriptek Windows rendszereken történő cseréjére szolgál. Mint ilyen, a PowerShell parancsfájl nagyjából úgy van beállítva, hogy mindent megtegyen manuálisan a parancssorból. Ez azt jelenti, hogy gyakorlatilag bármilyen változás lehetséges a rendszeren, a felhasználói fiókra vonatkozó korlátozásoktól függően. Tehát, ha csak duplán kattintanál egy PowerShell parancsfájlra, és teljes adminisztrátori jogosultságokkal futtatod, akkor egy ilyen egyszerű vonalhajózás tényleg roncsozni fogja a napot:

Get-ChildItem '$env:SystemDrive' -Recurse -ErrorAction SilentlyContinue | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue

NE futtassa a fenti parancsot!

Ez egyszerűen átmegy a fájlrendszeren és törli, amit csak lehet. Érdekes módon ez a rendszert nem lehet olyan gyorsan mûködtetni, mint gondolná - még akkor is, ha egy megemelt munkamenetben fut. De ha valaki felhívja a parancsfájl futtatását, mert hirtelen nem találja meg a fájlokat és nem futtat néhány programot, a "kikapcsolása és újraindítása" valószínűleg csak a Windows indítási javításába fogja őket vezetni, ahol azt fogják mondani semmit nem lehet tenni a probléma megoldására. Ami még rosszabb, az ahelyett, hogy egy olyan szkriptet kapna, amely csak elrejti a fájlrendszerét, a barátja lehetett becsapni egy olyan futást, amely letölti és telepíti a keylogger vagy a távoli hozzáférési szolgáltatást. Ezután ahelyett, hogy kérdéseket tett fel az üzembe helyezési javítással kapcsolatban, végül megkérdezhetik a rendőrségtől a banki csalással kapcsolatos kérdéseket!

Mostanra nyilvánvalónak kell lennie, hogy miért van szükség bizonyos dolgokra a végfelhasználók önmaguk védelmére. De az energiafelhasználók, a rendszergazdák és más geek általában (bár vannak kivételek) sokkal jobban óvatosak ezekről a fenyegetésekről, tudva, hogyan kell észlelni és könnyen elkerülni őket, és csak a munkájuk elvégzésével szeretnék folytatni. Ehhez meg kell akadályoznia néhány útblokk letiltását vagy működését:

  • A PowerShell alapértelmezés szerint nem engedélyezi a külső szkript végrehajtását. A PowerShell ExecutionPolicy beállítása megakadályozza a külső parancsfájlok alapértelmezés szerinti végrehajtását a Windows összes verziójában. Néhány Windows-verzió esetén az alapértelmezés egyáltalán nem teszi lehetővé a szkript végrehajtását. Megmutattuk, hogyan változtathatjuk meg ezt a beállítást a PowerShell parancsfájlok végrehajtásának engedélyezéséről a Windows 7 operációs rendszeren, de néhány szinten is lefedjük.
  • A PowerShell alapértelmezés szerint nincs társítva a.PS1 fájlkiterjesztéshez. Ezt eredetileg a PowerShell Geek School sorozatában hoztuk létre. A Windows az alapértelmezett műveletet állítja be a.PS1 fájlok számára a Notepad-ban való megnyitáshoz ahelyett, hogy elküldené őket a PowerShell parancsértelmezőre. Ez közvetlenül megakadályozza a rosszindulatú parancsfájlok véletlenszerű végrehajtását, amikor egyszerűen kettős kattintással.
  • Egyes PowerShell szkriptek nem fognak működni adminisztrátori jogosultságok nélkül. Még adminisztrátori szintű fiókkal is fut, még mindig szüksége van a felhasználói fiókok felügyeletére (UAC) keresztül bizonyos műveletek végrehajtására. A parancssori eszközök esetében ez kicsit nehézkes lehet. Nem akarjuk letiltani az UAC-t, de még mindig szép, ha könnyebben meg tudjuk oldani.

Ugyanezek a problémák merülnek fel a Kötegfájl használatával a PowerShell parancsfájlok egyszerűbb futtatásához, ahol átkerülünk egy kötegelt fájl létrehozásához, hogy átmenetileg megkerülhessük őket. Most megmutatjuk, hogyan állíthatja be a rendszerét egy hosszabb távú megoldással. Ne feledje, hogy ezeket a változtatásokat általában nem olyan rendszerekre használja, amelyek nem kizárólagosan használják Önt - különben más felhasználókat is nagyobb veszélybe sodorva ugyanazokat a problémákat fenyegeti, amelyeket ezek a funkciók megakadályoznak.

A.PS1 fájl társításának módosítása.

Az első, és talán a legfontosabb, hogy bosszantani kell a.PS1 fájlok alapértelmezett társulása. Ha ezeket a fájlokat a PowerShell.exe-től eltérő fájlokhoz társítja, akkor érdemes megakadályozni a nemkívánatos parancsfájlok véletlenszerű végrehajtását. De tekintetbe véve, hogy a PowerShell egy beépített parancsfájl-környezetet (ISE) tartalmaz, amelyet kifejezetten a PowerShell szkriptek szerkesztésére terveztek, miért szeretnénk alapértelmezés szerint megnyitni a.PS1 fájlokat a Jegyzettömbben? Még akkor is, ha nem á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 módosítani szeretné ezeket a beállításokat.

A.PS1 fájltársítást bármikor megváltoztathatja az Alapértelmezett programok vezérlőpultjára, de közvetlenül a Rendszerleíró adatbázisba ásva kicsit többet tud kontrollálni a fájlok megnyitásának módjáról. Ez lehetővé teszi továbbá a.PS1 fájlok helyi menüjében elérhető további beállítások módosítását. Ne felejts el biztonsági másolatot készíteni a registry-ről, mielőtt ezt megtenné!

A PowerShell szkriptek megnyitását szabályozó beállítások a következő helyen kerülnek tárolásra:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Ha meg szeretné nézni ezeket a beállításokat, mielőtt megváltoztatnák őket, nézze meg a kulcsot és annak almenüket a Regedit segítségével. A Shell kulcsnak csak egy értékűnek kell lennie, "(Alapértelmezett)", amely "Megnyitás" -ra van állítva. Ez egy mutató az alapértelmezett művelethez, amely duplán kattint a fájlra, amit az albillentyűkben látunk.

Bontsa ki a Shell kulcsot, és megjelenik három algomb. Ezek mindegyike egy végrehajtandó műveletet jelent, amely a PowerShell szkriptekre jellemző.

Bármelyik kulcsot kibővítheti az értékek feltérképezéséhez, de alapvetően az alábbi alapértelmezésekhez igazodik:
Bármelyik kulcsot kibővítheti az értékek feltérképezéséhez, de alapvetően az alábbi alapértelmezésekhez igazodik:
  • 0 - Futtatás a PowerShell segítségével. A "PowerShell futtatása" valójában egy opció neve, amely már a helyi PowerShell parancsfájlban található. A szöveg csak egy másik helyről húzódik meg, ahelyett, hogy a kulcsnevet, mint a többieket használja. És ez még mindig nem az alapértelmezett kettős kattintási művelet.
  • Szerkesztés - Nyissa meg a PowerShell ISE programot. Ez sokkal értelemszerűbb, mint a Notepad, de még mindig meg kell tennie a jobb gombbal a.PS1 fájlt.
  • Nyitott - Nyissa meg a Jegyzettömböt. Ne feledje, hogy ez a kulcs neve a Shell kulcs "(Alapértelmezett)" értéke. Ez azt jelenti, hogy a fájl duplán kattintva "Megnyitja" azt, és a művelet általában a Notepad használatával van beállítva.

Ha a már rendelkezésre álló előre elkészített parancssort szeretné ragaszkodni, akkor a "Shell" ("Alapértelmezett") értéket a "Shell" billentyűvel megváltoztathatja, hogy megfeleljen a kettős kattintással megegyező kulcsnak. Ez könnyen elvégezhető a Regedit-ből, vagy a PowerShell (plusz egy kis PSDrive csípés) rendszerleíró adatbázisának feltérképezéséből származó tanulságainkat felhasználhatja, hogy újrahasznosítható szkriptet építsen fel, amely konfigurálja a rendszereket az Ön számára. Az alábbi parancsokat egy megnövelt PowerShell munkamenetből kell futtatni, hasonlóan a futó CMD-hez, mint a rendszergazda.

Először meg kell adnia egy PSDrive-t a HKEY_CLASSES_ROOT számára, mivel ez alapértelmezés szerint nincs beállítva. Ez a parancs a következő:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Most a HKEY_CLASSES_ROOT beállításjegyzékben kulcsszavakat és értékeket navigálhat és szerkeszthet, akárcsak a rendszeres HKCU és HKLM PSDrives rendszerekben.

Kétszer kattintva konfigurálhatja a PowerShell parancsfájlokat:

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 0

A PowerShell szkriptek megnyitásához kattintson duplán a PowerShell ISE-ben:

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 'Edit'

Az alapértelmezett érték visszaállítása (kattintson duplán a PowerShell szkriptek megnyitásához a Jegyzettömbben):

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1Shell '(Default)' 'Open'

Ez csak az alapvető kettős kattintási művelet megváltoztatásának alapja. Részletesebben megvizsgáljuk, hogyan kezeljük a PowerShell szkripteket a PowerShell Explorer Explorerből a következő szakaszban megnyitott megnyitásakor. Ne feledje, hogy a körvonalak megakadályozzák, hogy a PSDrives megszakadjon az üléseken. Szóval, valószínűleg az új PSDrive vonalat is be kívánja építeni minden erre a célra létrehozott konfigurációs parancsfájlba, vagy hozzáadhatja a PowerShell profilhoz. Ellenkező esetben manuálisan kell futtatnia azt a bitet, mielőtt ilyen változtatásokat próbálna végrehajtani.

A PowerShell ExecutionPolicy beállítás módosítása.

A PowerShell ExecutionPolicy egy másik védelmi réteg a rosszindulatú szkriptek végrehajtása ellen. Ehhez több lehetőség is van, és néhány különböző módon állítható be. A legtöbbetől a legkevésbé biztonságosig a rendelkezésre álló lehetőségek a következők:

  • Korlátozott - Szkriptek nem futtathatók. (A legtöbb rendszer alapértelmezett beállítása.) Ez megakadályozza a profilszkript futását.
  • AllSigned - Minden szkriptet digitálisan alá kell írnia egy megbízható kiadónak, hogy futtassa a felhasználó figyelmeztetése nélkül. A kifejezetten nem megbízott kiadók által aláírt szkriptek, vagy egyáltalán nem digitálisan aláírt szkriptek nem futnak. A PowerShell arra kéri a felhasználót, hogy erősítse meg, hogy a szkriptet olyan kiadó írta-e alá, amelyet még nem neveztek megbízhatónak vagy megbízhatatlannak. Ha még nem írta alá digitálisan a profilszkriptet, és megbízhatónak bizonyult az aláírásban, akkor nem fog futni. Vigyázzon, hogy mely kiadókban bízik, mivel továbbra is rosszindulatú szkripteket futtathat, ha rosszat bízol.
  • RemoteSigned - Az internetről letöltött szkriptek esetében ez gyakorlatilag ugyanaz, mint az "AllSigned". A helyben létrehozott vagy az interneten kívüli forrásokból importált szkriptek azonban engedélykérés nélkül is futtathatók. Itt is óvatosnak kell lennie, hogy mely digitális aláírásokat bízol meg, de ügyeljen még a nem aláírt szkriptekre, amelyeket futtatni kíván. Ez a legmagasabb biztonsági szint, amellyel rendelkezhet egy működő profil szkripttel anélkül, hogy digitálisan aláírná.
  • Korlátlan - Minden parancsfájl futtatása engedélyezett, de a szkriptekhez az internetről egy megerősítési parancs szükséges. Ettől a ponttól kezdve teljesen magától értetődik, hogy elkerülje a megbízhatatlan szkriptek futtatását.
  • Bypass - Minden figyelmeztetés nélkül fut. Legyen óvatos ezzel.
  • Nem definiált - Nincs meghatározva a jelenlegi irányelv hatálya. Ez arra szolgál, hogy lehetővé tegye az alacsonyabb hatókörökben meghatározott irányelvek visszaadását (további részleteket alább) vagy az operációs rendszer alapértelmezett értékeit.

Ahogy az Undefined leírása is mutatja, a fenti szabályzatok egy vagy több több területen is beállíthatók. Használhatja a Get-ExecutionPolicy-ot, a -List paraméterrel, hogy megtekinthesse az összes hatókört és az aktuális konfigurációját.

A célterületek sorrendben vannak felsorolva, a legfelsõ legfelsõbb hatókörök felülbírálják az összes többiet. Ha nincs meghatározva irányelvek, a rendszer visszaáll az alapértelmezett beállításra (legtöbb esetben ez korlátozott).
A célterületek sorrendben vannak felsorolva, a legfelsõ legfelsõbb hatókörök felülbírálják az összes többiet. Ha nincs meghatározva irányelvek, a rendszer visszaáll az alapértelmezett beállításra (legtöbb esetben ez korlátozott).
  • A MachinePolicy egy olyan csoportházirendet képvisel, amely a számítógép szintjén érvényes. Ezt általában csak egy domainben alkalmazzák, de helyi szinten is végrehajtható.
  • A UserPolicy egy csoportházirendet jelent a felhasználó számára. Ezt általában csak vállalati környezetekben használják.
  • A folyamat a PowerShell ilyen példányára jellemző. Az ebben a körben szereplő irányelv módosításai nem befolyásolják a többi futó PowerShell folyamatot, és a munkamenet befejezése után hatástalanok lesznek. Ezt a -ExecutionPolicy paraméterrel állíthatja be a PowerShell indításakor, vagy beállítható a megfelelő Set-ExecutionPolicy szintaxissal a munkameneten belül.
  • A CurrentUser 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 kört módosíthatja a Set-ExecutionPolicy.
  • A LocalMachine a helyi rendszerleíró adatbázisban konfigurált tartomány, és a rendszer minden felhasználójára vonatkozik. Ez az alapértelmezett hatókör, amely megváltozik, ha a Set-ExecutionPolicy a -Scope paraméter nélkül fut. Mivel ez a rendszer minden felhasználójára vonatkozik, csak egy emelt munkamenetből lehet megváltoztatni.

Mivel ez a cikk elsősorban a biztonság növelésére szolgál a használhatóság megkönnyítése érdekében, csak az alsó három területet foglalkoztatjuk. A MachinePolicy és a UserPolicy beállítások csak akkor hasznosak, ha olyan korlátozó szabályozást kíván érvényesíteni, amelyet nem egyszerűen megkerül. Ha változtatásainkat a Folyamat szintjén vagy az alatt tartjuk, bármikor könnyen alkalmazhatunk bármilyen olyan szakpolitikai beállítást, amelyet egy adott helyzethez megfelelőnek tartunk.

A biztonság és a használhatóság közötti egyensúly megőrzése érdekében valószínűleg a képernyőképen látható irányelv valószínűleg a legjobb. A LocalMachine házirend korlátozott állapotra való beállítása általában megakadályozza a parancsfájlok futtatását bárki mástól. Természetesen ezt megkerülhetik azok a felhasználók is, akik sok erőfeszítés nélkül tudják, mit csinálnak. De meg kell tartania a nem-tech-szerű felhasználókat, hogy véletlenül valami katasztrofálisat indítanak a PowerShell-ben. Ha a CurrentUser (azaz Ön által) Unrestricted (Korlátlan) értékre van állítva, manuálisan futtathat parancsfájlokat a parancssorból, de tetszőleges óvatosságot tart fenn az internetről letöltött szkriptekhez. A ProcessScene RemoteSigned beállítása a PowerShell.exe parancsikonban vagy (ahogy alább megyünk) a PowerShell szkriptek viselkedését szabályozó nyilvántartási értékeken kell elvégezni. Ez lehetővé teszi az írható szkriptek egyszerű dupla kattintással működőképességét, ugyanakkor erősebb korlátot jelent a külső források (potenciálisan rosszindulatú) szkriptek véletlenszerű végrehajtása ellen. Itt szeretnénk ezt csinálni, mivel sokkal könnyebb véletlenül duplán kattintani egy szkriptet, mint általában az interaktív munkamenetről kézzel hívni.

A CurrentUser és a LocalMachine házirendének a fenti képernyőképen való megjelenítéséhez futtassa a következő parancsokat egy magasabb PowerShell munkamenetből:

Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser

A RemoteSigned házirendnek az Explorerből futtatott parancsfájlok érvényesítéséhez meg kell változtatnunk egy olyan értéket, amelyet korábban megvizsgáltunk. Ez különösen fontos, mert a PowerShell vagy a Windows verziójától függően az alapértelmezett konfiguráció az AllSigned kivételével az összes ExecutionPolicy beállítás kiválasztható. Ha meg szeretné tudni, hogy mi az aktuális konfiguráció a számítógépedhez, 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.1ShellCommand | Select-Object '(Default)'

Az alapértelmezett konfiguráció valószínűleg az alábbi két karakterlánc valamelyike vagy valami meglehetősen hasonló:

(Windows 7 SP1 x64 néven, PowerShell 2.0 verzióval)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-file' '%1'

(Windows 8.1 x64, PowerShell 4.0 esetén)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' 'if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & '%1''

Az első nem túl rossz, hiszen csak a létező ExecutionPolicy beállítások alatt hajtja végre a szkriptet. Javítani lehetne, ha szigorúbb korlátozásokat vezetnének be egy balesetveszélyes cselekvésért, de ez eredetileg nem lett volna célszerű kétszer kattintva kijátszani, és az alapértelmezett irányelvek általában korlátozottak. A második lehetőség azonban egy teljes körű megkerülése bármely végrehajtási politika, amelyre valószínűleg a helyén van - még a Korlátozott is. Mivel az áthidalás a Folyamat hatókörében kerül alkalmazásra, csak a szkriptek indításakor indított munkameneteket érinti. Ez azonban azt jelenti, hogy a szkriptek elindítását végül elképzelheted, hogy egyébként elvárnád (és szeretnéd) tiltani az irányelveidet.

A Folyamatszintű ExecutionPolicy beállítása az Explorerből indított parancsfájlokhoz, a fenti képernyőképnek megfelelően, ugyanazt a rendszerleíró értéket kell módosítania, amelyet csak kérdezünk. A Regeditben manuálisan is megteheti, megváltoztatva ezzel:

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1'

A beállításokat a PowerShell programból is megváltoztathatja. Ne feledje ezt megtenni egy megemelt munkamenetből, a HKCR PSDrive mappával.
A beállításokat a PowerShell programból is megváltoztathatja. Ne feledje ezt megtenni egy megemelt munkamenetből, a HKCR PSDrive mappával.

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1''

Futtassa a PowerShell parancsfájlokat rendszergazdaként.

Ugyanúgy, mint egy rossz ötlet, hogy teljesen letiltja az UAC-t, rossz biztonsági gyakorlat is van, ha futtathatja a kiemelt jogosultságokkal rendelkező parancsfájlokat vagy programokat, hacsak nem kell őket adminisztrátori hozzáférést igénylő műveletek elvégzéséhez. Tehát nem ajánlott az UAC-parancs kiadása a PowerShell-parancsfájlok alapértelmezett műveletére. Azonban új kontextus menü opciót adhatunk, amely lehetővé teszi számunkra, hogy egyszerűen futtassuk a szkripteket emelt munkamenetekben, amikor szükségünk van rá. Ez hasonlít az "Open with Notepad" hozzáadásához használt módszerhez az összes fájl helyi menüjéhez - de itt csak a PowerShell parancsfájlokat célozzuk meg. Az előző cikkben használt technikákat is átviszük, ahol a kötegelt fájlok helyett egy kötegelt fájlt használtunk a PowerShell szkript indításához.

Ehhez a Regeditben menjen vissza a Shell kulcsba, itt:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Ott létre kell hoznia egy új alkulcsot. Hívja ezt: "Run with PowerShell (Admin)". Ez alatt hozzon létre egy "Command" nevű alkulcsot.Ezután állítsa be a "(Alapértelmezett)" értéket a Parancs alatt:

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList '-ExecutionPolicy RemoteSigned -File '%1'' -Verb RunAs}'

Image
Image

A PowerShell-ben ugyanez történik háromszor is. Minden egyes új kulcsot, és az egyiket a "(Alapértelmezett)" érték beállításához a Parancshoz. Ne felejtsük el a magasságot és a HKCR térképet.

New-Item 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)' New-Item 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' Set-ItemProperty 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList ''-ExecutionPolicy RemoteSigned -File '%1''' -Verb RunAs}''

Szoros figyelmet kell fordítani a PowerShell-en keresztül bevezetett karakterlánc és az aktuális érték közötti különbségekre is. Különösen az egészet kell egy-egy idézetbe beágyazni, és duplázni a belső egyszavakra, hogy elkerüljük a parancselemzés hibáit.

Most új kontextus-menübejegyzést kell létrehozni a PowerShell parancsfájlokhoz, a "Run with PowerShell (Admin)" néven.

Az új opció két egymást követő PowerShell példányt hoz létre. Az első csak egy indító a második számára, amely a "-Verb RunAs" paraméterrel a Start-Process-ot használja az új munkamenet megemelésére. Innen a parancsfájlnak képesnek kell lennie az adminisztrátori jogosultságokkal való futtatásra, miután rákattint az UAC-parancssorra.
Az új opció két egymást követő PowerShell példányt hoz létre. Az első csak egy indító a második számára, amely a "-Verb RunAs" paraméterrel a Start-Process-ot használja az új munkamenet megemelésére. Innen a parancsfájlnak képesnek kell lennie az adminisztrátori jogosultságokkal való futtatásra, miután rákattint az UAC-parancssorra.

Utolsó simítások.

Van még egy pár csípés ehhez, ami még könnyebbé teheti az életet. Egy, mi a helyzet a Jegyzettömb funkció teljesen megszabadulni? Egyszerűen másolja át a "(Alapértelmezett)" értéket a "Szerkesztés" (alább) alatt található "Command" gomb alatt ugyanabba a helyre, mint a Megnyitás.

'C:WindowsSystem32WindowsPowerShellv1.0powershell_ise.exe' '%1'

Vagy használhatja ezt a PowerShell bitet (Admin és HKCR természetesen):

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellOpenCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell_ise.exe' '%1''

Még egy kisebb bosszúság a konzol szokása, hogy eltűnjön, miután a szkript befejeződött. Amikor ez megtörténik, nincs esélyünk a szkript kimenet hibák vagy egyéb hasznos információk megtekintésére. Ezt gondoskodni lehet, ha szünetet tartasz minden egyes szkript végére, természetesen. Alternatívaként módosíthatjuk a "(Alapértelmezett)" értékeket a Parancsbillentyűkhöz a "-NoExit" paraméter beviteléhez. Az alábbiakban láthatók a módosított értékek.

(Adminisztrációs hozzáférés nélkül)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-NoExit' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1'

(Adminisztrátori hozzáféréssel)

'C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList '-NoExit -ExecutionPolicy RemoteSigned -File '%1'' -Verb RunAs}'

És természetesen megadjuk azokat a PowerShell parancsokat is. Utolsó emlékeztető: Elevation & HKCR!

(Nem Admin)

Set-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-NoExit' '-ExecutionPolicy' 'RemoteSigned' '-file' '%1''

(Admin)

Set-ItemProperty 'HKCR:Microsoft.PowerShellScript.1ShellRun with PowerShell (Admin)Command' '(Default)' ''C:WindowsSystem32WindowsPowerShellv1.0powershell.exe' '-Command' ''& {Start-Process PowerShell.exe -ArgumentList ''-NoExit -ExecutionPolicy RemoteSigned -File '%1''' -Verb RunAs}''

Vezérelt egy spin.

Ennek tesztelésére olyan parancsfájlt használunk, amely megmutatja nekünk a végrehajtásvédelmi beállításokat, és hogy a parancsfájl adminisztrátori jogosultságokkal indult-e vagy sem. A szkriptet "MyScript.ps1" -nek nevezzük, és a "D: Script Lab" -on tároljuk a minta rendszerünkön. A kód az alábbiakban olvasható.

if(([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] 'Administrator')) {Write-Output 'Running as Administrator!'} else {Write-Output 'Running Limited!'} Get-ExecutionPolicy -List

A "Run with PowerShell" művelet használata:

A "Run with PowerShell (Adminisztrátor)" művelet használatával, miután rákattintott az UAC-ra:
A "Run with PowerShell (Adminisztrátor)" művelet használatával, miután rákattintott az UAC-ra:
A VégrehajtásiPolicy működésének bemutatásához a Folyamat hatókörénél a Windows úgy gondolja, hogy a fájl az internetről érkezett a PowerShell kóddal:
A VégrehajtásiPolicy működésének bemutatásához a Folyamat hatókörénél a Windows úgy gondolja, hogy a fájl az internetről érkezett a PowerShell kóddal:

Add-Content -Path 'D:Script LabMyScript.ps1' -Value '[ZoneTransfer]`nZoneId=3' -Stream 'Zone.Identifier'

Szerencsére volt -NoExit engedélyezve. Ellenkező esetben a hiba csak villogni kezdett volna, és nem is tudtuk volna.
Szerencsére volt -NoExit engedélyezve. Ellenkező esetben a hiba csak villogni kezdett volna, és nem is tudtuk volna.

A Zone.Identifier eltávolítható ezzel:

Clear-Content -Path 'D:Script LabMyScript.ps1' -Stream 'Zone.Identifier'

Hasznos hivatkozások:

  • PowerShell szkriptek futtatása egy kötegfájllal - Daniel Schroeder programozási blogja
  • A PowerShell rendszergazdai jogosultságainak ellenőrzése - Hé, parancsfájl-tipus! blog

Ajánlott: