9Sep
Из неколико разлога, углавном сигурносно повезаних, ПоверСхелл скрипте нису тако лако преносиве и могу се користити као серијске скрипте.Међутим, можемо склопити серијску скрипту са нашим ПоверСхелл скриптовима како бисмо радили на овим проблемима.Овде ћемо вам показати неколико од тих проблематичних области и како направити серијску скрипту да бисте се окупили око њих.
Зашто не могу само да копирам свој. ПС1 датотеку на други рачунар и покренем је?
Осим ако је циљани систем унапред конфигурисан да би омогућио покретање произвољних скрипти, уз потребне привилегије и коришћење одговарајућих поставки, шансе су да ћете се појавити у неким проблемима када покушате то урадити.
- ПоверСхелл није подразумевано повезан са екстензијом датотеке. ПС1.
Ово смо првобитно довели у нашу ПоверСхелл Геек школу.Виндовс повезује. ПС1 датотеке у Нотепад подразумевано, уместо да их шаље у ПоверСхелл командни интерпретер.Ово је спречавање случајног извршавања злонамерних скрипта једноставним двоструким притиском на њих.Постоје начини да можете променити ово понашање, али вероватно није нешто што желите да урадите на сваком рачунару на коме држите своје скрипте, посебно ако неки од тих рачунара нису ваши. - ПоверСхелл не дозвољава спољашње извршење скрипта по подразумеваној вредности.
Поставка ЕкецутионПолици у ПоверСхелл-у спречава извршавање спољашњих скрипти подразумевано у свим верзијама Виндовс-а.У неким верзијама Виндовс-а, подразумевана вредност не дозвољава извршавање скрипте.Показали смо вам како променити ово подешавање у програму Како дозволити извршење ПоверСхелл скрипте у оперативном систему Виндовс 7. Међутим, то је нешто што не желите да радите само на било ком рачунару. - Неке ПоверСхелл скрипте неће радити без администраторских дозвола.
Чак и да ради са налогом на нивоу администратора, ипак морате да прођете кроз контролу корисничке контроле( УАЦ) да бисте извршили одређене радње.Не желимо то онемогућити, али је и даље лепо када можемо мало олакшати. - Неки корисници могу имати прилагођена окружења ПоверСхелл.
Вероватно се неће често појављивати у овоме, али када то урадите, може вам учинити да покренете и решавате проблеме са својим скриптама мало фрустрирајуће.На срећу, можемо то да урадимо без икаквих трајних промена.
Корак 1: Двапут кликните да бисте покренули.
Почнимо са адресирањем првог проблема - аспекти датотеке. ПС1.Не можете двоструко кликнути да бисте покренули. ПС1 датотеке, али на тај начин можете извршити. БАТ датотеку.Тако ћемо написати серијску датотеку да позовемо ПоверСхелл скрипту из командне линије за нас.
Тако да не морамо поново писати пакетну датотеку за сваку скрипте, или сваки пут када померимо скрипту, користиће се само променљива за креирање путање датотеке за ПоверСхелл скрипту.Да бисте направили овај посао, батцх фајл ће морати бити постављен у исту фасциклу као и ПоверСхелл скрипта и имати исто име датотеке.Дакле, ако се ваша ПоверСхелл скрипта назива "МиСцрипт.пс1", желиш да назоваш своју серијску датотеку "МиСцрипт.бат" и провери да ли је у истој фасцикли.Затим поставите ове линије у серијску скрипту:
@ЕЦХО ОФФ ПоверСхелл.еке -Цомманд "& амп;% ~ дпн0.пс1 '" ПАУСЕАко није било других рестрикција безбедности на месту, то би заиста било свепотребно је покренути ПоверСхелл скрипту из батцх датотеке.Заправо, прва и последња линија су углавном само питање преференције - то је друга линија која заправо ради на послу.Ево раздора:
@ЕЦХО ОФФ искључује команду која одзива.Ово само задржава ваше друге команде да се приказују на екрану када се серијска датотека покреће.Ова линија је сама скривена употребом симбола( @) испред њега.
ПоверСхелл.еке -Цомманд "& амп;'% ~ Дпн0.пс1' " заправо покреће ПоверСхелл скрипту.ПоверСхелл.еке се наравно може позвати са било ког ЦМД прозора или батцх датотеке да покрене ПоверСхелл на конзолу као и обично.Такође можете да га користите за покретање наредби директно из батцх датотеке, укључивањем параметара -Цомманд и одговарајућих аргумената.Начин на који се ово користи за циљање наше. ПС1 датотеке је са специјалном% ~ дпн0 променљивом.Покренути из батцх датотеке,% ~ дпн0 оцјењује на слово погона, путању фолдера и име датотеке( без проширења) батцх датотеке.Пошто батцх фајл и ПоверСхелл скрипта буду у истој фасцикли и имају исто име,% ~ дпн0.пс1 ће превести на пуну датотеку путању ПоверСхелл скрипте.
ПАУСЕ само зауставља извршавање серије и чека на кориснички унос.Ово је опћенито корисно имати на крају ваших серијских датотека, тако да имате могућност да прегледате било који наредбени излаз пре него што прозор нестане.Док пролазимо кроз тестирање сваког корака, корисност овога ће постати очигледнија.
Дакле, основна батцх датотека је постављена.За потребе демонстрације ова датотека се чува као "Д: \ Сцрипт Лаб \ МиСцрипт.бат" и постоји "МиСцрипт.пс1" у истој фасцикли.Да видимо шта се догађа када двапут кликнемо на МиСцрипт.бат.
Очигледно да ПоверСхелл скрипта није покренута, али то се очекује - управо смо се обратили само првом од наших четири проблема.Међутим, овде су приказани неки важни битови:
- Назив прозора показује да је серијски скрипт успјешно покренуо ПоверСхелл.
- Прва линија излаза показује да се користи кориснички профил ПоверСхелл.Ово је потенцијални проблем # 4, наведен горе.
- Порука о грешци приказује ефекте ЕкецутионПолици ограничења.То је наш проблем # 2.
- Подвучени део поруке о грешци( који се наравно извршава ПоверСхелловим излазом грешака) показује да је серијска скрипта исправно усмерена на планирану ПоверСхелл скрипту( Д: \ Сцрипт Лаб \ МиСцрипт.пс1).Тако да барем знамо да много функционише исправно.
Профил, у овом случају, је једноставна скрипта једне линије која се користи за ову демонстрацију да генерише излаз кад год је профил активан.Можете такође прилагодити свој властити ПоверСхелл профил да то урадите и ако желите сами тестирати ове скрипте.Једноставно додајте следећу линију у свој скрипт:
"Профил за ПоверСхелл за Врите-Оутпут!"ЕкецутионПолици на тест систему овде је подешен на РемотеСигнед.Ово омогућава извршавање скрипте креираних локално( као што је скрипта профила), док блокира скрипте из вањских извора осим ако их није потписао поуздани ауторитет.За демонстрацијске сврхе кориштена је сљедећа наредба за означавање МиСцрипт.пс1 као извора:
Адд-Цонтент -Патх 'Д: \ Сцрипт Лаб \ МиСцрипт.пс1' -Валуе "[ЗонеТрансфер]" нЗонеИд = 3 "-Стреам 'Зоне.Идентифиер'То поставља алтернативни ток података Зоне.Идентифиер на МиСцрипт.пс1 тако да ће Виндовс мислити да је датотека дошла са Интернета.То се лако може променити помоћу следеће команде:
Цлеар-Цонтент -Патх 'Д: \ Сцрипт Лаб \ МиСцрипт.пс1' -Стреам 'Зоне.Идентифиер'Корак 2: Приближавање ЕкецутионПолици.
Приближавање поставке ЕкецутионПолици, из ЦМД-а или серијског скрипта, заправо је прилично лако.Једноставно мијењамо другу линију скрипте да додамо још један параметар у команду ПоверСхелл.еке.
ПоверСхелл.еке -ЕкецутионПолици Бипасс -Цомманд "& амп; '% ~ дпн0.пс1'"Параметар -ЕкецутионПолици може се користити за модификацију ЕкецутионПолици која се користи када се креира нова ПоверСхелл сесија.Ово неће трајати изван те сесије, тако да можемо овладати ПоверСхелл-у кад год је то потребно без слабљења опште сигурносне позиције система.Сада када смо то исправили, хајде да идемо на следећи начин:
Сада када је сценарио правилно извршен, можемо видети шта заправо ради.Дозвољава нам да знамо да ми водимо сценарио као ограничени корисник.Скрипту заправо покреће рачун са администраторским дозвољима, али контрола корисничког налога постаје на путу.Иако су детаљи о томе како скрипта проверава да ли је администраторски приступ изван оквира овог чланка, овдје је код који се користи за демонстрацију:
иф( ([Сецурити.Принципал.ВиндовсПринципал] [Сецурити.Принципал.ВиндовсИдентити]: : ГетЦуррент() ) ИсИнРоле( [Сецурити.Принципал.ВиндовсБуилтИнРоле] "Администратор")){ Врите-Оутпут 'Руннинг ас Администратор!'} Елсе{ Врите-Оутпут 'Руннинг Лимитед!'} ПаузирајТакође ћете приметити да постоје дваОперације "Паузирај" у излазу скрипте - један из ПоверСхелл скрипте и један из батцх датотеке.Разлог за ово ће бити очигледнији у наредном кораку.
Корак 3: Добијање администраторског приступа.
Ако ваша скрипта не покреће никакве команде које захтевају надморска висина, а прилично сте сигурни да нећете морати да бринете о томе да ли ћаскање на било ком вашем профилу буде на путу, можете прескочити остатак овога.Ако ипак користите неке цмдлете на нивоу администратора, требат ће вам овај комад.
Нажалост, нема начина да покренете УАЦ за надмоћ у оквиру батцх датотеке или ЦМД сесије.Међутим, ПоверСхелл нам омогућава да ово урадимо са Старт-Процессом.Када се користи са "-Верб РунАс" у својим аргументима, Старт-Процесс ће покушати да покрене апликацију уз администраторске дозволе.Ако ПоверСхелл сесија није већ повишена, ово ће покренути УАЦ позив.Да бисмо користили ово из батцх фајла за покретање нашег скрипта, завршићемо са два ПоверСхелл процесима - један да отпусти Старт-Процесс и други, покренуо Старт-Процесс, да би покренуо скрипту.Друга линија батцх фајла мора бити промијењена на ово:
ПоверСхелл.еке -Цомманд "& амп; Старт-Процесс ПоверСхелл.еке -АргументЛист" -ЕкецутионПолици Бипасс -Филе ""% ~ дпн0.пс1 "" -ВербРунАс} "Када се батцх фајл покреће, прва линија излаза коју видимо је из ПоверСхелл скрипта профила.Затим ће се појавити УАЦ позив када Старт-Процесс покуша да покрене МиСцрипт.пс1.
Након што кликнете на УАЦ промпт, нова инстанца ПоверСхелл ће се појавити.Пошто је ово нова инстанца, наравно, поново ћемо видети обавештење о скрипту профила.Затим, МиСцрипт.пс1 ради и видимо да смо стварно у повишеној сесији.
И постоји разлог што имамо и две паузе овде.Ако не за ону у ПоверСхелл скрипту, никада нећемо видети излаз скрипте - ПоверСхелл прозор ће се само појавити и нестати чим се скрипта покрене.И без паузе у батцх датотеки, нећемо моћи да видимо да ли је било грешака лансирање ПоверСхелл-а на првом месту.
Корак 4: Добијање окружених ПоверСхелл профила.
Да се ослободимо тог гадног прилагођеног профилног профила сада, да ли ћемо?Овде је тешка чак и непријатност, али ако корисник ПоверСхелл профил промени подразумеване поставке, променљиве или функције на начине које можда нисте очекивали помоћу ваше скрипте, они могу бити стварно проблематични.Много је једноставније покретати своју скрипту без профила у потпуности, тако да не морате бринути о овоме.Да бисмо то учинили, потребно је само још једном промијенити другу линију батцх датотеке:
ПоверСхелл.еке -НоПрофиле -Цомманд "& амп; Старт-Процесс ПоверСхелл.еке -АргументЛист--НоПрофиле -ЕкецутионПолици Бипасс -Филе"% ~ дпн0.пс1 "" '-Верб РунАс} "Додавање параметра -НоПрофиле обема инстанцама ПоверСхелл-а које покреће скрипта значи да ће скрипта профила корисника бити потпуно заобљена у оба корака и наша ПоверСхелл скрипта ће се покренути уприлично предвидљиво, подразумевано окружење.Овдје можете видјети да нема никаквог обавештења о профилу у било којој од покварених граната.
Ако вам не требају администраторска права у вашој ПоверСхелл скрипти, а прескочили сте корак 3, можете то учинити без друге инстанце ПоверСхелл-а, а друга линија ваше батцх датотеке би требала изгледати овако:
ПоверСхелл.еке -НоПрофиле -ЕкецутионПолици Бипасс -Цомманд "& амп; '% ~ дпн0.пс1'"Излаз ће тада изгледати овако:
( Наравно, за не-администраторске скрипте, можете учинити без паузе крај скрипте у вашој ПоверСхелл скриптиу овом тренутку, пошто је све ухваћено у истом прозору конзоле и било би задржано ту паузу на крају датотеке серије у сваком случају.)
Завршене батцх датотеке.
У зависности од тога да ли вам је потребна администраторска дозвола за вашу ПоверСхелл скрипту( и заиста не бисте требали да их тражите ако не желите), финална батцх датотека би требало да изгледа као једна од доле наведених.
Без администраторског приступа:
@ЕЦХО ОФФ ПоверСхелл.еке -НоПрофил -ЕкецутионПолици Бипасс -Цомманд "& амп; '% ~ дпн0.пс1'" ПАУСЕСа администраторским приступом:
@ЕЦХО ОФФ ПоверСхелл.еке -НоПрофиле -Цомманд "& амп;{Старт-Процесс ПоверСхелл.еке -АргументЛист '-НоПрофиле -ЕкецутионПолици Бипасс -Филе ""% ~ дпн0.пс1 ""' -Верб РунАс} "ПАУСЕНе заборавите да ставите пакетну датотеку у исту фасциклу као и ПоверСхелл скриптуда га користите и да му дате исто име.Затим, без обзира на који систем користите те датотеке, моћи ћете да покренете ПоверСхелл скрипту без потребе да се потрудите са било којим од безбедносних поставки на систему.Свакако можете свакако извршити те измене ручно, али то вам штеди те проблеме и нећете морати да бринете о каснијим промјенама промјена.
Референце:
- Покретање ПоверСхелл скрипте из батцх датотеке - Блог за програмирање Даниел Сцхроедер
- Провера администраторских дозвола у ПоверСхелл-у - Хеј, скриптни момак!Блог