Како користити батцх датотеку да би ПоверСхелл скрипте лакше покренули
Из неколико разлога, углавном везаних за сигурност, ПоверСхелл скрипте нису тако лако преносиве и употребљиве као што батцх скрипти могу бити. Међутим, можемо повезати батцх скрипту са нашим ПоверСхелл скриптама да бисмо решили ове проблеме. Овде ћемо вам показати неке од тих проблематичних области и како да направите батцх скрипту да бисте их заобишли.
Зашто не могу само да копирам .ПС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" "-Верб РунАс" ПАУСЕ
Не заборавите да ставите батцх датотеку у исту фасциклу као и ПоверСхелл скрипту коју желите да користите и дајте јој исто име. Затим, без обзира на то у који систем преузимате те датотеке, моћи ћете да покренете свој ПоверСхелл скрипт без потребе да се мучите са безбедносним подешавањима у систему. Свакако можете да ручно правите те промене сваки пут, али то вам штеди ту невољу и нећете морати да бринете да ћете касније променити промене.
Референце:
- Покретање ПоверСхелл скрипти из батцх датотеке - Блог програма за програмирање Даниел Сцхроедера
- Проверавање администраторских дозвола у ПоверСхелл-у - Хеј, Сцриптинг Гуи! Блог