Англійська для скриптів PowerShell

Словник для розробників, які пишуть автоматизацію PowerShell — конвеєр об’ єктів, правила дієслів- іменників командлетів, правила виконання і словник, який відрізняє PowerShell від звичайних скриптів оболонки.

PowerShell обговорюється так, ніби це « Windows bash », що викликає справжню плутанину, оскільки його визначальна особливість — об’ єктний конвеєр замість текстового конвеєра — змінює те, як ви описуєте майже все, що він робить. Прогалина у словнику зазвичай є тут, а не у синтаксисі.

Ключовий словник

** Об’ єктний конвеєр ** — основна відмінність PowerShell від POSIX- оболонок: команди передають структуровані.NET-об’ єкти з властивостями і методами вниз по конвеєрі, а не простий текст, тому команди нижче по течії можуть фільтрувати і діяти на фактичних властивостях об’ єкта замість аналізу текстового виводу. “Вам не потрібно аналізувати регулярний вираз цього виводу, щоб отримати назви процесів — Get-Process повертає реальні об’ єкти з властивістю .Name, тому перенесіть його до Select-Object Name і дозвольте конвеєру об’ єктів зробити витягування за вас.”

** Cmdlet ** — команда PowerShell, яка виконує строгу угоду про назви дієслова- іменника (наприклад, Get-Process або Stop-Service ), підтримується стандартизованим набором схвалених дієслів, що робить поведінку командлета більш передбачуваною, ніж довільна назва команди Unix. “Перевірте Get-Verb перед тим, як назвати нову функцію — PowerShell має список схвалених дієслів, тому командлет з назвою Get-Something поводиться передбачувано, як і будь-який інший командлет Get-, замість того, щоб кожен автор вигадував свій власний дієслово.”

** Правила виконання ** — параметр безпеки, який керує тим, чи дозволяється запуск скриптів PowerShell на певному комп’ ютері, відрізняється від прав доступу до файлів і є поширеним джерелом плутанини « чому цей скрипт навіть не запускається » для розробників, які не мають досвіду роботи з автоматизацією Windows. “Це не помилка дозволів — це типове правило виконання, яке блокує непідписані скрипти. Або підпишіть скрипт для використання у виробництві, або встановіть правило RemoteSigned для цього сеансу, якщо ви тільки тестуєте локально.”

** Сплаттинг ** — метод передачі набору параметрів командлету як однієї таблиці гешів або масиву замість їхнього окремого вбудованого списку, що покращує читабельність командлетів з багатьма параметрами і робить можливим повторне використання набору параметрів у викликах. “Замість повторення цих шести параметрів на кожному виклику New-AzVM, splat їх з однієї геш-таблиці — це простіше для читання, і ви можете побудувати геш-таблицю умовно засновану на середовищі до того, як виклик навіть відбудеться.”

** PSCustomObject ** — легкий, явно структурований тип об’ єкта, який використовується для створення чистого, передбачуваного виводу зі скрипту, що є звичайною практикою для будь- якої функції, яку слід передавати за допомогою каналу до інших командлетів, а не просто друкувати як текст. “Не повертати форматований рядок з цієї функції — повертати PSCustomObject з названими властивостями, щоб кожен, хто викликає цю функцію, міг перенести результат до Where-Object або Sort-Object на фактичну властивість.”

Звичайні фрази

  • Чи це перенесення реальних об’єктів вниз по трубопроводу, чи ми випадково занадто рано його затягуємо?»
  • «Чи відповідає цей cmdlet затвердженій конвенції дієслова, або це нестандартна назва?»
  • Чи це не вдається через політику виконання, або фактичну проблему дозволів?»
  • Чи варто нам робити splat цих параметрів замість переліку їх усіх в рядку?
  • «Чи повертає ця функція PSCustomObject, чи просто форматований текст, який важко споживати вниз по течії?»

Приклади висловлювань

Пояснення переваг конвеєра над оболонкою Unix: “Вам не потрібен awk або регулярний вираз — Get-ChildItem повертає реальні об’єкти файлів з властивістю .Length, тому ви можете фільтрувати безпосередньо за розміром файла з Where-Object замість аналізу текстового списку.”

Зневадження скрипту, який не буде виконано:

  • « Логіка скрипта не порушена — типове значення політики виконання на цьому комп’ ютері — Обмежене, що блокує запуск будь- якого скрипта, незалежно від того, хто його написав або що він робить. » *

Перегляд скрипта на предмет підтримки: “Ця функція логічно в порядку, але вона повертає форматований рядок замість PSCustomObject — це означає, що хто б не викликав її, не зможе легко відфільтрувати або впорядкувати результати, йому доведеться спочатку розібрати рядок.”

Професійні поради

  • Покладайтеся на конвейєр об’ єктів як на справжню перевагу PowerShell над текстовими оболонками — коли ви виявите, що використовуєте регулярний вираз для аналізу виводу команди, це зазвичай буде ознакою того, що вам слід фільтрувати за властивостями об’ єкта.
  • Дотримуйтесь затверджених правил дієслова ** cmdlet ** для будь- якої нетипової функції, яку слід використовувати як вбудовану команду — це зробить ваші інструменти передбачуваними для колег, які ніколи не бачили їх раніше.
  • Діагностуйте помилки скриптів, перевіряючи політику виконання на ранніх стадіях, особливо на незнайомих машинах — це один з найпоширеніших блокувальників «це просто має працювати» для розробників, які не мають досвіду роботи зі скриптами Windows.
  • Використовувати ** splatting **, якщо виклик командлета має більше трьох або чотирьох параметрів — це перетворює один нечитаний рядок на набір параметрів, який можна переглянути і умовно збудувати.
  • Повертає ** PSCustomObject ** з будь- якої функції, призначеної для використання у конвеєрі, а не форматований рядок — форматований вивід призначено для термінала; структуровані об’ єкти призначено для складання з іншими командлетами.

Практичні вправи

  1. Пояснити, чому об’ єктний конвеєр PowerShell зменшує потребу в аналізі тексту у порівнянні з оболонкою POSIX.
  2. Описати, що керує правилами виконання і чому вони відрізняються від прав доступу до файлів.
  3. Напишіть речення, у якому поясните, чому розпушування покращує читабельність виклику командлета з багатьма параметрами.

Поряд з основними: Навігація нюанс для не-народжені мовці

Основні концепції PowerShell — об’єкт конвеєра, командлети і політика виконання — є ключовими. Але їх освоєння не * просто * про те, щоб знати, що робить Get-Process; це про розуміння того, як ефективно спілкуватися в професійному середовищі розвитку, особливо коли це середовище населене носієм англійської мови, який очікує певного рівня точності і ясності в технічній документації і комунікації. Для тих, чия перша мова не англійська, це може бути схоже на навігацію по складній системі з нерозмовленими правилами. Розглянемо деякі типові сценарії, де нюансована фраза робить усю різницю.

Одним з найпоширеніших джерел плутанини є звичаї дієслова- іменника командлетів. Хоча Get-Process є простим, такі фрази як «змінити процес» або «створити новий процес» можуть бути неправильно інтерпретовані, якщо ви звикли до різних граматичних структур. Рідні носії часто вважають, що назви cmdlet вже передбачають дію — вони розуміють, що Set-Content встановлює вміст, а не просто отримує його. Аналогічно, при написанні описів PR, надто буквальні переклади технічних термінів можуть створювати неоднозначність. Замість того, щоб сказати « Скрипт створює файл », розгляньте « Скрипт створює файл журналу, у якому містяться докладні відомості про помилки ». Таким чином ви продемонструєте чітке розуміння призначення командлета і уникнете можливих нерозумінь щодо його функцій. Іншою поширеною пасткою є надмірна залежність від прямого перекладу; ідіоми рідко перекладаються безпосередньо, а PowerShell сильно залежить від встановлених конвенцій, які найкраще вивчаються через занурення і спостереження.

Перегляд коду є ще однією ключовою областю, де комунікаційні навички є найважливішими. Отримання коментаря на зразок « Потрібно більше обробки помилок » може бути розчаруванням, якщо ви не знайомі з очікуваним рівнем деталізації у такому зворотному зв’ язку. Корисною відповіддю буде запитання про пояснення: « Чи можете ви розібратися, які конкретні типи помилок слід обробляти і на якому етапі скрипту?» Це продемонструє вашу зацікавленість і бажання вивчити, а не просто відкинути коментар як нечіткий або критичний. Крім того, важливо використовувати точну мову під час опису потенційних проблем; замість « Це може зламатися », спробуйте « Існує можливість, що ця операція може призвести до помилки, якщо трапиться [особлива умова] »

Ось простий приклад, який показує, як фільтрувати процеси за назвою:

Get-Process -Name "notepad" | Where-Object {$_.CPU -gt 1}

Ця команда отримає всі процеси з назвою « notepad », а потім відфільтрує їх, залишивши лише ті, які споживають більше одного ядра процесора. Зверніть увагу на використання | (оператор конвеєра) - це фундаментальна концепція, але її можна легко пропустити, якщо ви не звикли до цієї парадигми програмування, заснованої на потоці.

І нарешті, пам’ятайте, що активне слухання і запитання, що прояснюють, є вашими найціннішими інструментами. Не вагайтеся шукати допомоги або пояснення, коли щось не зрозуміло; набагато краще попросити допомоги, ніж робити припущення, які можуть призвести до помилок або непорозумінь. Створення міцного фундаменту в словнику PowerShell є лише першим кроком - розвиток ефективних комунікаційних навичок розблокує ваш повний потенціал як розробника PowerShell.

Поширені запитання

Про що ця стаття "Англійська для скриптів PowerShell"?

Словник для розробників, які пишуть автоматизацію PowerShell — конвеєр об’ єктів, правила дієслів- іменників командлетів, правила виконання і словник, який відрізняє PowerShell від звичайних скриптів оболонки.

Чи безкоштовна ця стаття?

Так. Усі статті на CoderSlingo, включно з цією, доступні безкоштовно без реєстрації.

Скільки часу займає читання "Англійська для скриптів PowerShell"?

Приблизно 8 min.