Многим людям нравится использовать PowerShell , потому что он позволяет им делать то, что невозможно сделать с помощью графического интерфейса Windows. Несмотря на это, нельзя отрицать, что некоторые командлеты PowerShell могут быть немного утомительными или сложными. Но что, если бы существовал способ редактировать эти командлеты и заставить их «вести себя» так, как вы хотите? Хотите верьте, хотите нет, но есть простой способ сделать это. Вы можете изменить поведение командлета, изменив значения параметров PowerShell по умолчанию. В этой статье показано, как использовать параметры PowerShell по умолчанию для изменения поведения команд командлета.
Предупреждение
Прежде чем начать, есть несколько вещей, которые вам нужно иметь в виду. Хотя изменение параметров PowerShell по умолчанию и поведения cmdelt удобно, это может привести к проблемам. Если вы запустите сценарий, который предполагает, что измененный командлет будет вести себя определенным образом, вы можете получить непредсказуемые результаты. Поэтому вам следует тщательно менять параметры PowerShell по умолчанию.
Быстрый обзор
Существует две концепции PowerShell, с которыми вам необходимо ознакомиться, чтобы работать с параметрами по умолчанию. Первое понятие является вариативным. В PowerShell имена переменных всегда начинаются со знака доллара, и вы можете записать содержимое переменной, введя ее имя.
Второе понятие, с которым вы, возможно, знакомы, — это хеш-таблица. По сути, хеш-таблица представляет собой список, состоящий из пар ключ/значение. Например, предположим, что вы хотите создать хеш-таблицу, содержащую названия штатов США и их сокращения. Ниже приведен код:
$StateList = @{}
$StateList.add('Флорида','Флорида')
$StateList.add('Южная Каролина','SC')
$StateList.add('Джорджия','GA')
$StateList
Первая строка кода создает пустую хеш-таблицу с именем $StateList . Следующие три строки добавляют записи в таблицу. Каждая запись состоит из ключа (названия состояния) и значения (аббревиатуры состояния). В последней строке указано содержимое таблицы. Вы можете увидеть код в действии на изображении ниже.
Это всего лишь очень простой пример, и существует множество других способов использования хеш-таблиц.
Работа с параметрами PowerShell по умолчанию.
PowerShell имеет встроенную переменную, используемую для хранения параметров по умолчанию, используемых с его командлетами. Эта переменная называется $PSDefaultParameterValues . Как вы могли заметить из первоначального введения и названия переменной, это не обычная переменная, а хеш-таблица. Однако если вы введете имя переменной в PowerShell, вы быстро увидите, что таблица пуста, как показано ниже.

Итак, что мы можем сделать с этой переменной $PSDefaultParameterValues . Как упоминалось выше, вы можете контролировать поведение командлетов PowerShell. Единственный момент – вы не сможете преодолеть заложенные в команду командлета возможности. Итак, давайте посмотрим на пример.
Возможно, вы не захотите использовать этот пример в реальной жизни, но он покажет вам, насколько легко радикально изменить поведение командлета. Если вы введете командлет Get-TimeZone в PowerShell, вы увидите название часового пояса, для использования которого в данный момент настроен ваш компьютер. Вы можете увидеть этот пример на изображении ниже.

Теперь мы изменим этот командлет, чтобы он отображал не часовой пояс, который настроена использовать система, а доступные часовые пояса. Для этого нам понадобится синтаксис командлета с использованием командлета Get-Help, за которым следует командлет Get-TimeZone . Вы можете увидеть синтаксис командлета ниже.

Этот синтаксис включает параметр ListAvailable . Введите команду ниже:
$PSDefaultParameterValues.Add("Get-TimeZone:ListAvailable",$True)
Первая часть этой команды просто сообщает PowerShell, что вы хотите добавить значение в хеш-таблицу, как мы это сделали с примером сокращения штата США в предыдущем разделе. Эта хеш-таблица содержит пару ключ/значение. В этом случае ключом является имя командлета (Get-TimeZone), за которым следует запятая и имя параметра, который вы хотите установить. В данном случае имя параметра — ListAvailable. Вторая часть этого командлета — это значение, которое вы хотите присвоить параметру. Вот это $True . Параметру ListAvailable обычно не требуется значение, поэтому указание $True позволяет PowerShell использовать этот параметр без присвоения ему значения.
Если вы посмотрите на изображение ниже, вы увидите, что происходит при запуске командлета Get-TimeZone.

Что следует иметь в виду
Самое важное, что нужно понимать, — это то, что добавление нового значения для параметра PowerShell по умолчанию означает изменение поведения командлета по умолчанию, а не удаление его возможностей. Даже если вы измените командлет Get-TimeZone, чтобы он отображал доступные часовые пояса вместо отображения текущего часового пояса. Вы по-прежнему можете отображать информацию о текущем часовом поясе, если просматриваете больше.
Еще вам нужно знать, что пользовательские параметры по умолчанию можно удалить. Чтобы удалить один элемент, используйте команду $PSDefaultParameterValues.Remove , за которой следует имя элемента, который вы хотите удалить. Например:
$PSDefaultParameterValues.Remove("Get-TimeZone:ListAvailable")
Вместо этого вы можете удалить все содержимое хеш-таблицы с помощью этой команды:
$PSDefaultParameterValues.Clear();
Ниже вы можете увидеть примеры обеих техник:

Вы можете удалить всю хеш-таблицу или удалить одну запись.
Изменение поведения команды командлета по умолчанию — это то, что вы делаете не часто, но когда вам это понадобится, вы уже знаете, как это изменить.
Желаю вам успехов!
Узнать больше: