Лучшие Практики Ричарда Сиддевэя: Подробное Описание Powershell

подробный перевод Powershell. глава 40. Эта глава содержит: лучшая практика для всех случаев лучшая практика для продвинутых скриптов передовая практика для промышленного использования В этой книге были даны полезные советы и практические рекомендации о том, как облегчить ваши усилия, упростить поддержку сценариев, ускорить выполнение и добиться большей гибкости.

В этой главе мы собрали наши рекомендации и систематизировали их для удобства использования.

Наша лучшая рекомендация — использовать PowerShell каждый день.

Рекомендации ниже расположены не в порядке важности.

40.1 Общие рекомендации по PowerShell Эти рекомендации даны вам, чтобы стать лучше в PowerShell.

Прочтите справочную систему, там много полезной информации, особенно примеров.

Используя powershell 3, поставьте в планировщике задачу регулярно обновлять справку.

Установите политику выполнения скриптов как минимум Удаленноподписанный Используйте конвейерную ленту.

PowerShell предназначен для конвейерного использования.

Если вы будете кодировать в стиле старых скриптовых языков, вы потеряете много функциональности и создадите себе много работы.

Дайте переменным осмысленные имена, например $компьютер лучше чем Избегайте имен с пробелами или специальными символами, например.

${компьютер} Никогда не устанавливайте переменную $ErrorActionPreference (или $VerbosePreference или любую другую «предпочтительную» переменную) глобально в оболочке, скрипте или функции.

Вместо этого используйте такие параметры, как -ErrorAction или для параметра функции -Подробный , чтобы установить параметр в том месте, где это необходимо.

Избегайте перебора коллекций — используйте ForEach-Объект или Для каждого , за исключением случаев, когда нет другого пути достижения цели.

(PowerShell не любит предложения For) Используйте в основном одинарные кавычки, если вам не нужно выполнять замену переменных или вычислять выражения внутри строки.

Если вы работаете с SQL-запросами, помните, что для строк используются одинарные кавычки и вам необходимо выполнять специальную изоляцию или использовать двойные кавычки.

Замена строк или анимация намного проще, чем конкатенация строк.

Используйте встроенные константы, PowerShell понимает КБ, МБ, ГБ, ТБ и ПБ (встроенные переменные).

Избегайте использования собственных классов и методов .

NET, если нет другой альтернативы.

Будьте осторожны с кодом, который вы загружаете из Интернета, всегда дважды проверяйте, что делает этот код. Ваша среда может отличаться от среды автора и может вызвать множество проблем в вашей среде.

Фильтруйте раньше, форматируйте позже! Отбирайте данные как можно раньше, чтобы уменьшить их размер, но форматируйте данные как можно позже, желательно непосредственно перед отображением.

40.2 Лучшие практики для расширенных сценариев Эти рекомендации созданы для написания лучших сценариев.

Укажите явно тип переменной, напишите [строка]$logfile Присвойте переменным явное значение после создания, если эта переменная находится в этой области.

(проще - всегда инициализировать) Дайте имена функциям и потокам, например, в стиле gagol-action. Get-DiskInfo Если сценарий, выполняющий задачу, используется до упаковки как отдельная функция, присвойте файлу сценария имя в стиле командлета, например: Set-UserAttributes.ps1 Называя функцию или скрипт в форме глагол-существительное, добавьте к существительному две или три буквы-префикса.

Обычно это аббревиатура названия вашей организации.

Например для компании "великие вещи" возможно ГТ , тогда имя функции может выглядеть так Get-GTUserInfo или сценарий можно назвать Set-GTUserInfo.ps1 Если вы создаете частные (неэкспортируемые) переменные в модуле, дайте этим переменным отдельные имена.

Многие разработчики используют подчеркивание, чтобы выделить эти имена, например $_private или $_counter .

При определении параметров для сценария или функции используйте имена параметров, соответствующие именам параметров стандартных командлетов, выполняющих те же функции.

Например, имя параметра -Имя компьютера предпочтительнее -хозяин или -машины, потому что это стандартно для командлетов.

Если хотите, вы всегда можете определить псевдоним.

Избегайте использования Write-Host, если вам не нужно распечатать сообщение непосредственно на экране.

Если вы используете Write-Host, используйте цвет выделения или фона, чтобы ваше сообщение выделялось на экране.

Использовать [Привязка командлета] в ваших скриптах и функциях, чтобы использовать подробные, отладочные и расширенные функции.

Если ваша функция вносит изменения в систему, добавьте поддержку -Что, если И -Подтверждать Использовать Подробная запись для отображения хода выполнения, чтобы вы могли использовать этот параметр для отслеживания того, где выполняется ваша функция или что она делает сейчас.

Использовать Запись-отладка для отображения сообщений, необходимых для более успешной отладки, помните, что Запись-отладка останавливает выполнение скрипта и дает возможность приостановить его работу.

Помните, что Предупреждение о записи существует для тех случаев, когда нужно вывести на экран информационное сообщение Скрипты и функции должны создавать один и только один тип вывода данных.

Обычно это объект и это может быть специально сконструированный тип объекта, сочетающий в себе свойства множества различных объектов.

Всегда пишите справку для своих скриптов и функций, даже если это справка на основе комментариев.

XML-справка обычно используется, если вам необходимо предоставить справку на разных языках.

Избегайте изменения псевдонимов, переменных и других элементов области, отличной от вашей.

(вышло умно.

Проще — в других скоупах ничего не меняйте, всячески избегайте этого, иначе получите код, который сложно рефакторить и отлаживать) Разделите задачу на четкие небольшие фрагменты в зависимости от их функциональности и выделите каждый из них как функцию.

Например, скрипт, выполняющий 10 разных действий, следует разделить на 10 разных функций, и скрипт должен вызывать эти функции в правильной последовательности.

Подпишите примеры кода, которые вы планируете распространять вместе со сценарием, своим сертификатом, если планируете публиковать его публично.

Да, для этого необходимо иметь сертификат подписи кода, для этого вам придется его где-то получить.

Но это хороший способ для общественности проверить, что ваш код никто не подделал.

Избегайте использования венгерской нотации в именах переменных.

Соглашения о типах $strName или $intCounter for powershell устарели и не имеют смысла.

(проще — не используйте старое именование, просто назовите его.

В PowerShell нет типов как таковых, нет необходимости в венгерской нотации) Используйте отступы для блоков кода, таких как {ваш код}, в конструкциях, чтобы сделать ваш код читабельным.

Использовать Подробная запись , Запись-отладка и подобные вставки для документирования скриптов и функций, используйте эти конструкции вместо вставки комментариев для тех же целей.

В скриптах, функциях или рабочий процесс Избегайте псевдонимов (кроме распространенных, например Реж.

) и сокращения имен параметров.

Напишите полные имена параметров и командлетов для лучшего понимания и читаемости.

Не используйте символ новой строки (`) в конце строки, чтобы перенести остальную часть строки на другую строку.

Вместо этого разорвите линию в «естественном» месте.

Разрыв строки после любого из следующих символов ( {,; | эти символы позволяют продолжить текущую строку на новой строке.

Если вы используете прокси-функцию, обязательно опубликуйте ее в своем модуле.

Использовать Тестовый путь и проверяем существование папки и файлов Попробуй.

поймай.

наконец следует использовать везде, где исключение может вызвать проблемы с выполнением Сохраняйте свой код логически простым например, избегайте двойного отрицания в если выражение Не используйте блокнот в качестве редактора сценариев , за исключением очень простых действий.

Используйте Powershell ISE. Блокнот подходит для быстрого просмотра кода небольших скриптов, потому что.

блокнот является редактором по умолчанию.

Избегайте использования слова «Возврат» .

Вместо этого подумайте о том, как объекты передаются по конвейеру.

.

(о том, как правильно передавать параметры, есть специальная глава.

Это настолько специфическая штука для настройки, что заслуживает отдельной статьи) 40.3 передовой опыт промышленного использования Эти рекомендации разработаны для наилучшего использования в промышленной среде.

Используйте групповые политики для распространения настроек Удаленное взаимодействие PowerShell и политики выполнения скриптов Используйте удаленное соединение и Сеансы CIM для доступа, если имеется более одной удаленной машины.

Использовать задачи (задания PowerShell) если вам нужно выполнить длительные операции Используйте рабочие процессы, когда вам нужны сценарии, способные пережить перезагрузки, прерывания или параллельные вычисления.

Храните свои скрипты в системе контроля версий, у вас будет резервная копия и при необходимости вы сможете вернуться к старой версии.

Ограничьте доступ к вашим сценариям только тем, кто в них нуждается.

Использовать Тестовое соединение для проверки доступности удаленной машины перед началом работы с ней.

(проще - всегда проверяйте доступность хоста) Убедитесь, что на ваших серверах включено удаленное взаимодействие PowerShell. Кредиты должны быть установлены до их использования, не создавайте их в коде, особенно если вам нужно более одного.

(проще - не генерируйте и не храните пароли в скриптах, запрашивайте их перед использованием) Использовать DCOM WS-MAN Для сеансы CIM если возможно.

Разработайте стандартизированные шаблоны сценариев, особенно если сценарии написаны командой администраторов.

Установите политику выполнения Всеподписано , используйте подпись кода сертификатом из вашей PKI (позже я сделаю отдельный перевод главы дебатов о безопасности) Создайте публичный скрипт и определите в нем общие функции, псевдонимы и переменные, которые могут понадобиться вашей команде.

Храните этот скрипт в публичном месте, доступен через UNC а затем добавьте его в свой профиль.

Надеемся, это понятно без слов.

Тестируйте все в промежуточной среде .

Благодаря современным возможностям виртуализации проводить проверки стало легко.

Вам не нужно особенно дорогое оборудование; вы можете начать с бесплатного VirtualBox или установить пробную версию продукта от Microsoft Дон Джонс, Ричард Сиддэуэй.

Подробности о Powershell. глава 40. Теги: #PowerShell

Вместе с данным постом часто просматривают: