Kā vieglāk konfigurēt Windows darbam ar PowerShell skriptiem

Satura rādītājs:

Kā vieglāk konfigurēt Windows darbam ar PowerShell skriptiem
Kā vieglāk konfigurēt Windows darbam ar PowerShell skriptiem
Anonim
Windows un PowerShell ir iebūvētas drošības funkcijas un noklusējuma konfigurācijas, kas paredzētas, lai novērstu gala lietotāju nejaušu skriptu palaišanu ikdienas darbībās. Tomēr, ja jūsu ikdienas darbības regulāri ietver rakstīšanu un darbību ar jūsu PowerShell skriptiem, tas var būt neērtības, nevis ieguvums. Šeit mēs parādīsim, kā rīkoties šajās funkcijās, neapdraudot drošību.
Windows un PowerShell ir iebūvētas drošības funkcijas un noklusējuma konfigurācijas, kas paredzētas, lai novērstu gala lietotāju nejaušu skriptu palaišanu ikdienas darbībās. Tomēr, ja jūsu ikdienas darbības regulāri ietver rakstīšanu un darbību ar jūsu PowerShell skriptiem, tas var būt neērtības, nevis ieguvums. Šeit mēs parādīsim, kā rīkoties šajās funkcijās, neapdraudot drošību.

Kā un kāpēc Windows un PowerShell novērstu skripta izpildi.

PowerShell ir komandas apvalks un skriptu valoda, kas paredzēta, lai aizstātu CMD un partijas skriptus Windows sistēmās. Tādējādi PowerShell skriptu var konfigurēt diezgan daudz, lai veiktu visu, ko jūs varētu darīt manuāli no komandrindas. Tas nozīmē, ka jūsu sistēmā ir iespējams veikt gandrīz visas izmaiņas, nepārsniedzot jūsu lietotāja kontā esošos ierobežojumus. Tātad, ja jūs varētu vienkārši dubultklikšķi uz PowerShell skripta un palaist to ar pilna administratora privilēģijām, vienkāršs vienlaidrāns, piemēram, tas varētu patiešām sagraut savu dienu:

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

NELIETOJIET iepriekš minēto komandu!

Tas vienkārši iet caur failu sistēmu un izdzēš visu iespējamo. Interesanti, ka tas var nedarīt sistēmu darboties nevajadzīgi tik ātri, kā jūs domājat - pat tad, ja tas darbojas no paaugstinātas sesijas. Bet, ja kāds jums zvana pēc šī skripta izpildīšanas, jo pēkšņi nevar atrast savus failus vai palaist dažas programmas, "to izslēdzot un atkal ieslēdzot", iespējams, novedīs tos pie Windows startēšanas labošanas, kur viņiem teiks, ka tur ir neko nevar izdarīt, lai novērstu problēmu. Kas varētu būt sliktāk, tā vietā, lai izveidotu tādu skriptu, kurā tikko tiek notīrīta failu sistēma, jūsu draugs var tikt sagrābts tā, kurš lejupielādē un instalē keylogger vai attālās piekļuves pakalpojumu. Tad, tā vietā, lai uzdotu jums jautājumus par Startup Repair, viņi galu galā var lūgt policijai dažus jautājumus par banku krāpšanu!

Tagad ir jābūt acīmredzamam, kāpēc dažām lietām ir nepieciešams, lai tādējādi aizsargātu tiešos lietotājus no sevis. Bet enerģijas lietotāji, sistēmu administratori un citi geeks parasti (lai gan ir izņēmumi) ir nedaudz piesardzīgāki par šiem draudiem, zinot, kā uz vietas un viegli izvairīties no tiem, un vienkārši vēlaties turpināt, lai paveiktu savu darbu. Lai to izdarītu, viņiem būs vai nu jāatslēdz vai jāapstrādā daži ceļa posmi:

  • PowerShell pēc noklusējuma neļauj ārējai skripta izpildei. PowerShell iestatījums ExecutionPolicy novērš ārējo skriptu izpildi pēc noklusējuma visās Windows versijās. Dažās Windows versijās noklusējums neļauj izpildīt skriptu vispār. Mēs parādījām, kā mainīt šo iestatījumu sadaļā Kā atļaut PowerShell skriptu izpildi operētājsistēmā Windows 7, taču šeit to aplūkosim arī dažos līmeņos.
  • Pēc noklusējuma PowerShell nav saistīts ar.PS1 faila paplašinājumu. Mēs to sākotnēji radījām PowerShell Geek skolu sērijās. Windows nosaka noklusējuma darbību.PS1 failiem, lai tos atvērtu Notepad, nevis nosūtīt tos PowerShell komandu interpretatoram. Tas ir tieši novērstu ļaunprātīgu skriptu nejaušu izpildi, kad tie tiek vienkārši dubultklikšķi.
  • Daži PowerShell skripti nedarbosies bez administratora atļaujām. Pat darbojoties ar administratora līmeņa kontu, jums ir nepieciešams, lai veiktu noteiktas darbības, izmantojot lietotāja konta kontroli (UAC). Komandrindas rīku gadījumā tas var būt mazliet apgrūtinošs, lai vismaz teiktu. Mēs negribam atspējot UAC, bet tas joprojām ir jauki, ja mēs varam to padarīt nedaudz vieglāk rīkoties.

Šie paši jautājumi ir izklāstīti sadaļā Kā izmantot partijas failu, lai padarītu PowerShell skriptus vieglāk izpildīt, kur mēs jums pavada rakstīšanas sērijveida failu, lai uz laiku tos apietu. Tagad mēs parādīsim jums, kā iestatīt sistēmu ar ilgtermiņa risinājumu. Paturiet prātā, ka jūs parasti nedrīkstat veikt šīs izmaiņas sistēmās, kuras ne tikai jūs izmantojat, pretējā gadījumā jūs nododat citiem lietotājiem lielāku risku darboties tādās pašās problēmās, kādas šīs iezīmes ir paredzētas novēršanai.

.PS1 failu saistīšanas maiņa.

Pirmais, un, iespējams, galvenais, kaitinošs satriecošais faktors ir noklusējuma apvienojums.PS1 failiem. Šādu failu saistīšana ar neko citu kā PowerShell.exe ir noderīga, lai novērstu nevēlamu skriptu nejaušu izpildi. Bet, ņemot vērā, ka PowerShell nāk ar integrētu skriptu apgabalu (ISE), kas ir īpaši izstrādāts PowerShell skriptu rediģēšanai, kāpēc mēs pēc noklusējuma vēlamies atvērt.PS1 failus Notepad? Pat ja jūs neesat gatavs pilnībā pāriet uz dubultklikšķi, lai palaistu funkciju, jūs, iespējams, vēlēsities uzlabot šos iestatījumus.

Jūs varat mainīt.PS1 failu saistību ar jebkuru programmu, kuru vēlaties ar noklusējuma programmu vadības paneli, bet tieši rakt reģistrā, dodot jums mazliet lielāku kontroli pār to, kā tiks atvērti faili. Tas arī ļauj iestatīt vai mainīt papildu iespējas, kas pieejamas kontekstizvēlnē.PS1 failiem. Neaizmirstiet izveidot reģistra dublējumkopiju pirms to izdarīt!

Reģistra iestatījumi, kas kontrolē PowerShell skriptu atvēršanu, tiek saglabāti šādā vietā:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Lai izpētītu šos iestatījumus, pirms mēs gatavojamies mainīt tos, skatiet šo taustiņu un tā apakškategorijas ar Regedit. Shell taustiņam vajadzētu būt tikai vienai vērtībai "(Noklusējums)", kas ir iestatīts uz "Atvērt". Šis ir rādītājs noklusējuma darbībai, veicot dubultklikšķi uz faila, ko redzēsim apakšizvēlnēs.

Izvērsiet Shell taustiņu, un jūs redzēsiet trīs sub-taustiņus. Katrs no tiem ir darbība, kuru varat veikt, kas ir raksturīga PowerShell skriptiem.

Varat izvērst katru atslēgu, lai izpētītu vērtības iekšpusē, taču tās pamatā pielīdzina šādiem noklusējuma iestatījumiem:
Varat izvērst katru atslēgu, lai izpētītu vērtības iekšpusē, taču tās pamatā pielīdzina šādiem noklusējuma iestatījumiem:
  • 0 - palaist ar PowerShell. "Run ar PowerShell" faktiski ir opcijas nosaukums jau konteksta izvēlnē PowerShell skriptiem. Teksts tiek vienkārši izvilkts no citas vietas, nevis izmantojot atslēgas nosaukumu, piemēram, citus. Un tas joprojām nav noklusējuma dubultklikšķa darbība.
  • Rediģēt - atveriet PowerShell ISE. Tas padara daudz noderīgāku par Notepad, bet jums joprojām ir ar peles labo pogu noklikšķiniet uz.PS1 faila, lai to paveiktu pēc noklusējuma.
  • Atvērt - atvērt piezīmjdatorā. Ņemiet vērā, ka šis atslēgas nosaukums ir arī virkne, kas tiek saglabāta Shell taustiņa "(Noklusējuma)" vērtība. Tas nozīmē, ka, veicot dubultklikšķi uz faila, tas tiks "Atvērts", un šī darbība parasti tiek izmantota Notepad.

Ja vēlaties ielīmēt iepriekš izveidotas komandrindas, kas jau ir pieejamas, varat vienkārši mainīt vērtību "(Noklusējums)", izmantojot Shell taustiņu, lai atbilstu atslēgas vārdam, kas atbilst tam, ko vēlaties veikt ar dubultklikšķi. To var viegli izdarīt no sistēmas Regedit vai arī izmantot mūsu apmācībā gūto pieredzi par reģistra izpēti ar PowerShell (kā arī nelielu PSDrive kniebienu), lai sāktu veidot atkārtoti lietojamu skriptu, kas var konfigurēt jūsu sistēmas jums. Tālāk norādītās komandas jāaktivizē no paaugstinātās PowerShell sesijas, līdzīgi kā CMD kā administrators.

Pirmkārt, jūs vēlaties konfigurēt PSDrive par HKEY_CLASSES_ROOT, jo tas nav iestatīts pēc noklusējuma. Komandai tas ir:

New-PSDrive HKCR Registry HKEY_CLASSES_ROOT

Tagad jūs varat pārvietoties un rediģēt reģistra atslēgas un vērtības HKEY_CLASSES_ROOT tāpat, kā jūs būtu regulāri HKCU un HKLM PSDrives.

Lai konfigurētu dubultklikšķi, lai tieši palaistu PowerShell skriptus:

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

Lai konfigurētu dubultklikšķi, lai PowerShell ISE atvērtu PowerShell skriptus:

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

Lai atjaunotu noklusējuma vērtību (tiek iestatīts dubultklikšķis, lai Notepad atvērtu PowerShell skriptus):

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

Tas ir tikai pamati dubultklikšķa darbības noklusējuma mainīšanai. Mēs sīkāk aplūkosim, kā pielāgot PowerShell skriptu apstrādi, kad nākamajā sadaļā tie tiek atvērti PowerShell pārlūkprogrammā Explorer. Paturiet prātā, ka apgabals neļauj PSDrives turpināt darboties sesijās. Tātad, jūs, iespējams, vēlēsities iekļaut līniju New-PSDrive jebkuras konfigurācijas skripta, kuru izveidojat šim nolūkam, sākumā vai pievienot to savam PowerShell profilam. Pretējā gadījumā jums vajadzēs palaist šo mazliet manuāli, pirms mēģināt veikt izmaiņas šādā veidā.

PowerShell ExecutionPolicy iestatījuma maiņa.

PowerShell's ExecutionPolicy ir vēl viens aizsardzības slānis pret ļaunprātīgu skriptu izpildi. Tam ir vairākas iespējas, un pāris dažādi tā iestatījumi. No visvairāk līdz visnekaitīgākajām pieejamajām iespējām:

  • Ierobežots. Nav atļauts palaist skriptus. (Noklusējuma iestatījums lielākajai daļai sistēmu.) Tas pat neļaus jūsu profila skriptam darboties.
  • AllSigned - visiem skriptiem digitāls paraksts uzticams izdevējs, lai palaistu bez lietotāja vaicājuma. Skripti, ko parakstījuši izdevēji, kuri skaidri noteikti kā neuzticami, vai skripti, kas nav cipariem parakstīti, netiks rādīti. PowerShell liks lietotājam apstiprinājumu, ja skriptu paraksta izdevējs, kas vēl nav definēts kā uzticams vai neuzticams. Ja jūs neesat digitāli parakstījis savu profila skriptu un esat uzticējis šo parakstu, to nevarēs palaist. Esiet uzmanīgs, kurus izdevējus jūs uzticaties, jo jūs joprojām varat nonākt ļaunprātīgos skriptus, ja uzticaties nepareizajam.
  • RemoteSigned - skriptiem, kas lejupielādēti no interneta, tas faktiski ir tāds pats kā AllSigned. Tomēr skriptus, kas izveidoti lokāli vai importēti no citiem avotiem, izņemot internetu, drīkst palaist bez apstiprinājuma uzvednes. Šeit jums arī vajadzētu būt uzmanīgiem, kurus ciparparakstus jūs uzticaties, bet pat būt uzmanīgākam no neparakstītajiem skriptiem, kurus esat izvēlējies palaist. Šis ir visaugstākais drošības līmenis, saskaņā ar kuru jums var būt darba profila skripts, bez digitālā parakstīšanas.
  • Neierobežots. Visiem skriptiem ir atļauts palaist, bet skriptiem no interneta nepieciešams pieprasīt apstiprinājumu. No šī brīža tas ir pilnīgi atkarīgs no jums, lai izvairītos no neuzticamu skriptu izpildes.
  • Apvedceļš - viss noris bez brīdinājuma. Esi uzmanīgs ar šo vienu.
  • Nenoteikts - pašreizējā darbības jomā nav definēta neviena politika. To izmanto, lai atļautu atgriezties pie politikas, kas noteiktas zemās jomās (sīkāka informācija turpmāk) vai OS noklusējuma iestatījumiem.

Kā ieteikts ar Undefined aprakstu, iepriekš minētās politikas var iestatīt vienā vai vairākās no vairākām jomām. Jūs varat izmantot Get-ExecutionPolicy ar parametru -List, lai redzētu visas darbības jomas un to pašreizējo konfigurāciju.

Darbības sfēras ir uzskaitītas prioritātes secībā, visaugstākajā definētajā jomā visās pārējās. Ja neviena politika nav definēta, sistēma atgriežas pie noklusējuma iestatījuma (vairumā gadījumu tā ir ierobežota).
Darbības sfēras ir uzskaitītas prioritātes secībā, visaugstākajā definētajā jomā visās pārējās. Ja neviena politika nav definēta, sistēma atgriežas pie noklusējuma iestatījuma (vairumā gadījumu tā ir ierobežota).
  • MachinePolicy pārstāv grupas politiku, kas darbojas datora līmenī. Tas parasti tiek piemērots tikai domēnā, bet to var izdarīt arī vietējā līmenī.
  • UserPolicy pārstāv lietotājam piemērojamo grupas politiku. To parasti parasti izmanto arī uzņēmuma vidē.
  • Process ir šī PowerShell gadījuma īpašais mērķis. Izmaiņas šajā apjomā iekļautajā politikā neietekmēs citus darbojošos PowerShell procesus un pēc šīs sesijas beigām būs neefektīvas. To var konfigurēt pēc parametra -ExecutionPolicy, kad PowerShell tiek palaists, vai arī to var iestatīt ar pareizu sesijas iestatījumu Set-ExecutionPolicy.
  • CurrentUser ir apgabals, kas ir konfigurēts vietējā reģistrā un attiecas uz lietotāja kontu, ko izmanto, lai palaistu PowerShell. Šo jomu var mainīt ar Set-ExecutionPolicy.
  • LocalMachine ir lokālā reģistra konfigurācija, kas attiecas uz visiem sistēmas lietotājiem. Šī ir noklusējuma darbības joma, kas tiek mainīta, ja Set-ExecutionPolicy darbojas bez parametra -Scope. Tā kā tas attiecas uz visiem sistēmas lietotājiem, to var mainīt tikai no paaugstinātas sesijas.

Tā kā šis raksts galvenokārt attiecas uz drošību, lai atvieglotu lietojamību, mēs esam tikai noraizējušies par trim zemākajām jomām. MachinePolicy un UserPolicy iestatījumi ir patiešām noderīgi tikai tad, ja vēlaties ieviest ierobežojošu politiku, kas nav tik vienkārši apieta. Turpinot izmaiņas procesa līmenī vai zemāk, mēs jebkurā brīdī varam viegli izmantot jebkuru politikas iestatījumu, ko mēs uzskatām par vajadzīgu konkrētai situācijai.

Lai saglabātu līdzsvaru starp drošību un lietojamību, visticamāk vislabāk būs ekrānuzņēmumā norādītā politika. Vietnes automātiskās politikas iestatīšana ierobežotai parasti aizkavē skriptu palaišanu ikvienam, kas nav jūs. Protams, to var apiet lietotāji, kuri zina, ko viņi dara bez daudz pūļu. Bet tai vajadzētu saglabāt jebkādus ne-tech-savvy lietotājus no nejauši izraisīt kaut ko katastrofālu PowerShell. Izmantojot CurrentUser (t.i., tu), kas iestatīts kā Neierobežots, jūs varat manuāli izpildīt skriptus no komandrindas, lai gan jums patīk, bet saglabā atgādinājumu par piesardzību skriptiem, kas lejupielādēti no interneta. Procesa līmenī RemoteSigned iestatījums ir jādara īsceļu uz PowerShell.exe vai (kā mēs to darīsim tālāk) reģistra vērtībās, kas kontrolē PowerShell skriptu uzvedību. Tas ļaus viegli dubultklikšķis uz palaišanas funkcionalitāti visiem rakstītajiem skriptiem, vienlaikus radot stingrāku barjeru pret nejaušu (potenciāli ļaunprātīgu) skriptu izpildi no ārējiem avotiem. Mēs vēlamies to izdarīt šeit, jo ir daudz vieglāk nejauši divreiz uzklikšķināt uz skripta, nevis parasti to izsaukt manuāli no interaktīvās sesijas.

Lai iestatītu CurrentUser un LocalMachine politikas, kā parādīts iepriekš redzamajā ekrānuzņēmumā, izpildiet šādas komandas no paaugstinātās PowerShell sesijas:

Set-ExecutionPolicy Restricted Set-ExecutionPolicy Unrestricted -Scope CurrentUser

Lai ieviestu RemoteSigned politiku attiecībā uz skriptiem, kas palaisti pārlūkprogrammā Explorer, mums būs jāmaina vērtība kādā no reģistra atslēgas, kādas mēs meklējām agrāk. Tas ir īpaši svarīgi, jo, atkarībā no jūsu PowerShell vai Windows versijas, noklusējuma konfigurācija var apiet visus ExecutionPolicy iestatījumus, izņemot AllSigned. Lai noskaidrotu, kāda pašreizējā konfigurācija ir jūsu datoram, jūs varat palaist šo komandu (pārliecinieties, ka vispirms ir izveidots HKCR PSDrive):

Get-ItemProperty HKCR:Microsoft.PowerShellScript.1ShellCommand | Select-Object '(Default)'

Jūsu noklusējuma konfigurācija, iespējams, būs viena no šādām divām virknēm vai kaut kas diezgan līdzīgs:

(Redzams Windows 7 SP1 x64, ar PowerShell 2.0)

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

(Redzams operētājsistēmā Windows 8.1 x64, ar PowerShell 4.0)

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

Pirmais nav pārāk slikts, jo tas viss ir izpildīt skriptu esošo ExecutionPolicy iestatījumu ietvaros. To varētu uzlabot, ieviešot stingrākus ierobežojumus, lai veiktu vairāk negadījumu, taču to sākotnēji nebija paredzēts aktivizēt, veicot dubultklikšķi, un parasti noklusējuma politika parasti tiek ierobežota. Tomēr otrais variants ir pilnīgs jebkura ExecutionPolicy apvedceļš, kuru jūs, visticamāk, varētu izmantot, pat ierobežots. Tā kā apvedceļš tiks izmantots procesa darbības laukā, tas ietekmē tikai sesijas, kuras tiek palaista, kad skripti tiek palaisti pārlūkprogrammā Explorer. Tomēr tas nozīmē, ka jūs varētu beigties ar skriptu palaišanu, kurus jūs citādi (un vēlaties) aizliegt savu politiku.

Lai iestatītu Procesa līmeņa ExecutionPolicy skriptiem, kas palaisti no pārlūkprogrammas Explorer, saskaņā ar iepriekš minēto ekrānuzņēmumu, jums būs jāmaina tāda pati reģistra vērtība, kādā mēs tikko vaicājām. Jūs to varat izdarīt manuāli programmā Regedit, mainot to uz šo:

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

Ja vēlaties, varat arī mainīt iestatījumu no PowerShell. Neaizmirstiet to izdarīt no paaugstinātas sesijas, kartējot HKCR PSDrive.
Ja vēlaties, varat arī mainīt iestatījumu no PowerShell. Neaizmirstiet to izdarīt no paaugstinātas sesijas, kartējot HKCR PSDrive.

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

Palaidiet PowerShell skriptus kā administratoru.

Tāpat kā slikta ideja pilnībā izslēgt UAC, arī slikta drošības prakse ir palaist skriptus vai programmas ar paaugstinātām privilēģijām, ja vien tām patiešām nav nepieciešams veikt operācijas, kurām nepieciešama Administratora piekļuve. Tāpēc nav ieteicams izveidot UAC uzvedni noklusējuma darbībā PowerShell skriptiem. Tomēr mēs varam pievienot jaunu konteksta izvēlnes opciju, lai mums varētu viegli palaist skriptus paaugstinātās sesijās, kad mums tas ir nepieciešams. Tas ir līdzīgs metodēm, ko izmanto, lai pievienotu "Atvērt ar Notepad" visu failu kontekstuālajā izvēlnē - bet šeit mēs tikai gatavojamies mērķēt uz PowerShell skriptiem. Mēs arī pārcelsim dažus iepriekšējā rakstā izmantotos paņēmienus, kur mēs izmantojām partijas failu, nevis reģistra hacks, lai palaistu PowerShell skriptu.

Lai to izdarītu Regedit, atgriezieties Shell taustiņā:

HKEY_CLASSES_ROOTMicrosoft.PowerShellScript.1Shell

Tur izveidojiet jaunu apakšatslēgu. Zvaniet tā "Run ar PowerShell (Admin)". Zem tā izveidojiet citu apakšatslēgu ar nosaukumu "Command".Pēc tam iestatiet vērtību "(Noklusējums)" komandu uz šādu:

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

To izdarot PowerShell, šajā laikā faktiski vajadzēs trīs līnijas. Viens katram jaunajam taustiņam un viens, lai iestatītu komandas vērtību "(Noklusējums)". Neaizmirstiet paaugstinājumu un HKCR kartēšanu.
To izdarot PowerShell, šajā laikā faktiski vajadzēs trīs līnijas. Viens katram jaunajam taustiņam un viens, lai iestatītu komandas vērtību "(Noklusējums)". Neaizmirstiet paaugstinājumu un HKCR kartēšanu.

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}''

Tāpat pievērsiet īpašu uzmanību atšķirībām starp stringi, kas tiek ievadīta caur PowerShell, un faktisko vērtību, kas notiek reģistrā. Īpaši, mums ir jāaprīko visa lieta ar vienu kotējumu un dubultā uz iekšējām vienas kotētām, lai izvairītos no kļūdām komandu parsējot.

Tagad jums ir nepieciešams jauns konteksta izvēlnes ieraksts PowerShell skriptiem, ko sauc par "Run with PowerShell (Admin)".

Jaunā opcija ģenerēs divus secīgus PowerShell gadījumus. Pirmais ir tikai otrais palaišanas līdzeklis, kas izmanto sākuma procesu ar parametru "-Verb RunAs", lai pieprasītu paaugstinājumu jaunai sesijai. No turienes jūsu skriptam vajadzētu spēt darboties ar Administratora privilēģijām pēc noklikšķināšanas, izmantojot UAC uzvedni.
Jaunā opcija ģenerēs divus secīgus PowerShell gadījumus. Pirmais ir tikai otrais palaišanas līdzeklis, kas izmanto sākuma procesu ar parametru "-Verb RunAs", lai pieprasītu paaugstinājumu jaunai sesijai. No turienes jūsu skriptam vajadzētu spēt darboties ar Administratora privilēģijām pēc noklikšķināšanas, izmantojot UAC uzvedni.

Finishing touches.

Tas ir tikai pāris tweaks uz šo, kas var palīdzēt padarīt dzīvi mazliet vieglāk vēl. Attiecībā uz vienu, kā pilnībā atbrīvoties no Notepad funkcijām? Vienkārši nokopējiet vērtību "(Noklusējums)" no Vadības taustiņa zem Rediģēt (tālāk), tajā pašā vietā, kas atrodas sadaļā Atvērt.

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

Vai arī jūs varat izmantot šo mazliet PowerShell (protams, ar Admin & HKCR):

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

Vēl viens neliels satraukums ir konsoles ieradums izzust, kad skripts ir pabeigts. Ja tas notiks, mums nav iespēju pārbaudīt skripta izlaidi kļūdām vai citu noderīgu informāciju. Par to var rūpēties, protams, katras skripta beigās ieliekot pauzi. Kā alternatīvu, mēs varam mainīt komandu taustiņu vērtības ("Noklusējuma"), lai iekļautu parametru "-NoExit". Zemāk ir mainītas vērtības.

(Bez administratora piekļuves)

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

(Ar piekļuvi administratoram)

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

Un, protams, mēs jums dosim tos arī PowerShell komandās. Pēdējais atgādinājums: Elevation & HKCR!

(Ne-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}''

Ņem to par spin.

Lai to pārbaudītu, mēs izmantosim skriptu, kas var mums parādīt ExecutionPolicy iestatījumus vietā un vai skripts tika palaists ar administratoru atļaujām. Skripts tiks saukts par "MyScript.ps1" un tiks saglabāts mūsu "paraugu sistēmā" "D: Script Lab". Kods ir norādīts zemāk.

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

Izmantojot darbību "Palaist ar PowerShell":

Izmantojot darbību "Palaist ar PowerShell (Admin)", pēc noklikšķināšanas, izmantojot UAC:
Izmantojot darbību "Palaist ar PowerShell (Admin)", pēc noklikšķināšanas, izmantojot UAC:
Lai demonstrētu ExecutionPolicy darbībā procesa ietvaros, mēs varam padarīt Windows domāt, ka fails nāk no interneta ar šo mazliet PowerShell kodu:
Lai demonstrētu ExecutionPolicy darbībā procesa ietvaros, mēs varam padarīt Windows domāt, ka fails nāk no interneta ar šo mazliet PowerShell kodu:

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

Par laimi, mums bija aktivizēts -NoExit. Pretējā gadījumā šī kļūda būtu tikko miris, un mēs nebūtu zinājuši!
Par laimi, mums bija aktivizēts -NoExit. Pretējā gadījumā šī kļūda būtu tikko miris, un mēs nebūtu zinājuši!

Zone.Identifier var noņemt ar šo:

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

Noderīgas atsauces:

  • Darbojas PowerShell skripti no sērijveida faila - Daniela Šrīdera programmēšanas emuārs
  • Pārbaude administratora atļaujām PowerShell - Hei, skriptu puisis! Emuārs

Ieteicams: