Go pro: Ръководството на Power Power за PowerShell

Ако сте се борили с Windows 10, несъмнено сте чували за PowerShell. Ако наскоро сте се опитали да направите нещо изискано с Win7 / 8.1, вероятно PowerShell също е излязъл. След години, в които разчитате на командния ред на Windows и събраните партидни файлове, е време да насочите вниманието си към нещо по-мощно, по-адаптивно - по-добро.

PowerShell е огромно допълнение към инструментариума на Windows и може да предизвика малко страх предвид тази огромност. Това скриптов език ли е, командна обвивка, восък за под? Трябва ли да свържете кратка команда с екземпляр .Net клас, за да стартирате с доставчици? И защо всички документи за поддръжка говорят за администратори - трябва ли да съм професионален администратор на Windows, за да го използвам?

Отпуснете се. PowerShell е мощен, но не е нужно да плаши.

Следващото ръководство е насочено към онези, които са изпълнили една или две команди на Windows или са им предоставили партиден файл. Помислете за поетапна трансформация от PowerShell любопитна към PowerShell способна.

Стъпка 1: Развийте го

Първото нещо, от което ще се нуждаете, е самата PowerShell. Ако използвате Windows 10, вече имате инсталиран PowerShell 5 - най-новата версия. (Win10 Anniversary Update има 5.1, но няма да разберете разликата с Fall Update's 5.0.) Windows 8 и 8.1 се доставят с PowerShell 4, което е достатъчно добро за намокряне на краката ви. Инсталирането на PowerShell на Windows 7 не е трудно, но изисква допълнителни грижи - и трябва да инсталирате .Net Framework отделно. JuanPablo Jofre описва подробно как да инсталирате WMF 5.0 (Windows Management Framework), който включва PowerShell, в допълнение към инструментите, които вероятно няма да използвате при стартиране, на MSDN.

PowerShell предлага два интерфейса. Напредналите потребители ще се възползват от пълноценния GUI, известен като интегрирана среда за скриптове (ISE). Начинаещите обаче се обслужват най-добре от PowerShell Console, прост текстов интерфейс, напомнящ командния ред на Windows или дори DOS 3.2.

За да стартирате PowerShell като администратор от Windows 10, щракнете върху Старт и превъртете надолу списъка с приложения до Windows PowerShell. Кликнете върху този ред, щракнете с десния бутон на Windows PowerShell и изберете Изпълни като администратор. В Windows 8.1 потърсете Windows PowerShell в системната папка на Windows. В Win7 той е в папката „Аксесоари“. Можете да стартирате PowerShell като „нормален“ потребител, като следвате същата последователност, но с лев бутон на мишката.

Във всяка версия на Windows можете да използвате търсене в Windows, за да търсите PowerShell. В Windows 8.1 и Windows 10 можете да го поставите на вашето Ctrl-X „Меню за захранване“ (щракнете с десния бутон върху празно място в лентата на задачите и изберете Properties; в раздела Navigation поставете отметка в квадратчето Replace Command Prompt). След като го отворите, е добре да прикачите PowerShell към лентата на задачите си. Да, ще ви хареса толкова много.

Стъпка 2: Въведете старомодни команди на Windows

Ще бъдете изумени колко синтаксисът на командния ред на Windows работи, както се очаква в PowerShell.

Например cdпроменя директориите (известни още като папки) и dirвсе още изброява всички файлове и папки, включени в текущата папка.

В зависимост от начина, по който стартирате конзолата PowerShell, можете да започнете в c:\Windows\system32или в c:\Users\. В примера на екранната снимка използвам cd ..(обърнете внимание на интервала), за да се придвижвам едно по едно ниво нагоре, след което стартирам, за dirда изброя всички файлове и подпапки в C:\директорията.

Стъпка 3: Инсталирайте помощните файлове

Команди като cdи dirне са естествени команди на PowerShell. Те са псевдоними - заместители на реални PowerShell команди. Псевдонимите могат да бъдат полезни за тези от нас с памет на пръстите, която е трудно да се преодолее. Но те дори не започват да докосват най-важните части на PowerShell.

За да започнете да усещате самата PowerShell, напишете, helpпоследвано от команда, която знаете. Например на екранната снимка въвеждам help dir.

Помощта за PowerShell ми казва, че това dirе псевдоним за командата PowerShell Get-ChildItem. Разбира се, ако въведете get-childitemв PS C:\>подканата, ще видите точно това, което сте видели с dirкомандата.

Както е отбелязано в долната част на екранната снимка, помощните файлове за PowerShell не се инсталират автоматично. За да ги извлечете (можете да искате да ги получите), влезте в PowerShell в режим на администратор, след което напишете update-help. Инсталирането на помощните файлове ще отнеме няколко минути и може да ви липсват няколко модула - Помощта за NetWNV и SecureBoot не успя да се инсталира на моята тестова машина. Но когато приключите, пълната система за помощ ще бъде на ваше разположение.

От този момент нататък напишете, get-helpпоследвано от командата („cmdlet“ в PowerShell говори, произнася се „command-let“), която ви засяга и вижте цялата помощ за този елемент. Например, get-help get-childitemизвежда обобщение на get-childitemопциите. Той също така ви подканва да въведете вариации по темата. По този начин, следното:

get-help get-childitem -examples

произвежда седем подробни примера за това как да се използва get-childitem. Командата PowerShell

get-help get-childitem -detailed

включва тези седем примера, както и подробно обяснение на всеки параметър, наличен за get-childitemкомандлета.

Стъпка 4: Получете помощ за параметрите

На help dirекранната снимка може би сте забелязали, че има два списъка под SYNTAXза get-childitem. Фактът, че има два отделни синтаксиса за командлета, означава, че има два начина за стартиране на командлета. Как поддържате отделните синтаксиси - и какво означават параметрите? Отговорът е лесен, ако знаете трика.

За да получите всички подробности относно параметрите за get-childitemкомандлета или който и да е друг командлет, използвайте -fullпараметъра по следния начин:

get-help get-childitem -full

Това създава редовен списък на това, което можете да направите с командлета и какво може (или не!) Да се ​​случи. Вижте екранната снимка.

Пресявайки подробностите за параметрите, е доста лесно да се види, че get-childitemможе да се използва за извличане на „дъщерни“ елементи (като имената на подпапки или имена на файлове) в определено от вас място, със или без конкретни съвпадения на символи. Например:

get-childItem “*.txt” -recurse

извлича списък на всички “ *.txt” файлове в текущата папка и всички подпапки (поради -recurseпараметъра). Като има предвид следното:

get-childitem “HKLM:\Software”

връща списък с всички ключове на системния регистър на високо ниво в HKEY_LOCAL_MACHINE\Software.

Ако някога сте опитвали да влезете в системния регистър с помощта на команден ред на Windows или команден файл, сигурен съм, че можете да видите колко мощен трябва да бъде този вид достъп.

Стъпка 5: Забийте имената

Има една причина, поради кратките команди, които сме виждали досега изглеждат по същия начин: get-childitem, update-help, и get-helpвсички следват същия глагол-съществително конвенция. За щастие, всички командлети на PowerShell използват тази конвенция с глагол, предшестващ съществително (единствено число). Тези от вас, които са прекарали седмици в борба с непоследователно наречени команди VB и VBA, могат да си въздъхнат с облекчение.

За да видите къде отиваме, разгледайте някои от най-често срещаните кратки команди (благодарение на блога на Ей Уилсън „Хей, момче за скриптове!). Започнете с командлетите, които влизат във вашата система, и извадете полезна информация, като например следното:

  • set-location: Задава текущото работно място на определено място
  • get-content: Получава съдържанието на файл
  • get-item: Получава файлове и папки
  • copy-item: Копира елемент от едно място на друго
  • remove-item: Изтрива файлове и папки
  • get-process: Получава процесите, които се изпълняват на локален или отдалечен компютър
  • get-service: Получава услугите, работещи на локален или отдалечен компютър
  • invoke-webrequest: Получава съдържание от уеб страница в интернет

За да видите как работи конкретна команда, използвайте get-help, както в

get-help copy-item -full

Въз основа на описанието на помощта можете лесно да разберете какво иска кратката команда. Например, ако искате да копирате всичките си файлове и папки от Documentsдо c:\temp, ще използвате:

copy-item c:\users\[username] \documents\* c:\temp

Докато въвеждате тази команда, ще видите няколко приятни щриха, вградени в средата на PowerShell. Например, ако въведете copy-iи натиснете клавиша Tab, PowerShell попълва Copy-Itemи интервал. Ако въведете погрешно командлет и PowerShell не може да разбере, получавате много задълбочено описание на това, което се е объркало.

Опитайте тази команда (Може да се опита да ви накара да инсталирате програма, за да прочетете полето „about“. Ако е така, игнорирайте го.)

invoke-webrequest askwoody.com

Получавате кратък списък с декларациите за съдържанието на уеб страницата, заглавките, изображенията, връзките и други. Вижте как работи това? Забележете в get-helpсписъка за invoke-webrequestтова, че invoke-webrequestкратката команда „връща колекции от формуляри, връзки, изображения и други важни HTML елементи“ - точно това, което трябва да видите на екрана си.

Някои кратки команди ви помагат да контролирате или разглеждате самата PowerShell:

  • get-command: Изброява всички налични кратки команди (дълъг списък!)
  • get-verb: Изброява всички налични глаголи (левите половинки на кратки команди)
  • clear-host: Изчиства дисплея в хост програмата

Различни параметри (не забравяйте, get-help) ви позволяват да намалите командите и да стесните опциите, които могат да ви бъдат от полза. Например, за да видите списък на всички команди, които работят с услуги на Windows, опитайте следното:

get-command *-service

В него са изброени всички глаголи, които са на разположение serviceкато съществително име. Ето резултата:

Get-Service

New-Service

Restart-Service

Resume-Service

Set-Service

Start-Service

Stop-Service

Suspend-Service

Можете да комбинирате тези кратки команди с други кратки команди, за да влезете в почти всяка част на PowerShell. Тук тръбите влизат в картината.

Стъпка 6: Вкарайте тръбите

Ако някога сте използвали командния ред на Windows или сте сложили през партиден файл, знаете за пренасочването и тръбите. С прости думи, както пренасочването (  >символът), така и каналите ( |символът) вземат изхода от дадено действие и го залепват някъде другаде. Можете например да пренасочите изхода на dirкоманда към текстов файл или да „ прехвърлите “ резултата от pingкоманда в find, за да филтрирате интересни резултати, като например:

dir > temp.txt

ping askwoody.com | find “packets” > temp2.txt

Във втората команда по-горе findкомандата търси низа packetsв изходящия изход на askwoody.com pingи залепва всички редове, които съвпадат във файл, наречен temp2.txt.

Може би изненадващо, първата от тези команди работи добре в PowerShell. За да изпълните втората команда, искате нещо подобно:

ping askwoody.com | select-string packets | out-file temp2.txt

Използването на пренасочване и тръби значително разширява възможностите на командния ред на Windows: Вместо да превъртате безкрайно надолу по екрана, търсейки текстов низ, например, можете да съберете тръбна команда на Windows, която прави проверка вместо вас.

PowerShell има възможност за тръбопроводи, но не е ограничена до текст. Вместо това PowerShell ви позволява да предавате цял обект от една кратка команда на следващата, където „обект“ е комбинация от данни (наречени свойства) и действия (методи), които могат да се използват върху данните.

Трудната част обаче се крие в подравняването на обектите. Видът обект, доставен от една кратка команда, трябва да съвпада с видовете обекти, приети от получаващата команда. Текстът е много прост вид обект, така че ако работите с текст, подреждането на елементи е лесно. Други обекти не са толкова елементарни.

Как да го разбера? Добре дошли в get-memberкомандлета. Ако искате да знаете какъв тип обект произвежда кратката команда, прекарайте я през нея get-member. Например, ако се опитвате да разберете процесите, които се изпълняват на вашия компютър, и сте стеснили опциите до get-processкомандлета, ето как можете да разберете какво създава get-processкомандлетът:

get-process | get-member

Изпълнението на тази команда създава дълъг списък със свойства и методи за get-process, но в самото начало на списъка можете да видите типа обект, който get-process създава:

TypeName: System.Diagnostics.Process

Най-долу екрана ви казва също така, че get-processима свойства, наречени Handles, Name, NPM, PM, SI, VM, и WS.

Ако искате да манипулирате изхода на, get-processза да можете да работите с него (за разлика от това да показва дълъг списък с активни процеси на монитора), трябва да намерите друга кратка команда, която ще работи System.Diagnostics.Processкато вход. За да намерите желана команда, просто използвайте… изчакайте… PowerShell:

get-command -Parametertype System.Diagnostics.Process

Това създава списък с всички кратки команди, които могат да се справят System.Diagnostics.Process.

Някои кратки команди са известни с това, че получават почти всякакъв вид вход. Главен сред тях: where-object. Може би объркващо, where-objectциклично преглежда всеки елемент, изпратен по тръбопровода, един по един и прилага каквито и да е критерии за подбор. Има специален маркер, наречен $_. което ви позволява да преминете през всеки елемент в тръбата, един по един.

Да кажем, че сте искали да излезете със списък на всички процеси, изпълнявани на вашата машина, които се наричат ​​„ svchost” - в PowerShell говорите, искате да съвпадате в Nameсвойство на  svchost. Опитайте тази команда PowerShell:

get-process | where-object {$_.Name -eq “svchost”}

На where-objectвъншен вид кратката команда на всеки System.Diagnostics.Processелемент, сравнява .Nameна този елемент, за да " svchost"; ако елементът съвпада, той изплюва края на тръбата и се въвежда на монитора ви. Вижте екранната снимка.