Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Назначение: Windows PowerShell 2.0, Windows PowerShell 3.0
Вставьте сюда введение.
РАЗДЕЛ
about_Command_Precedence
КРАТКОЕ ОПИСАНИЕ
Описание способов, которыми Windows PowerShell® выбирает команды для выполнения.
ПОДРОБНОЕ ОПИСАНИЕ
В этом разделе объясняется, как Windows PowerShell выбирает команды для выполнения, особенно в том случае, если сеанс содержит несколько команд с одним и тем же именем. Здесь также содержатся сведения о выполнении команд, которые не запускаются по умолчанию, а также приводится описание способов избежания конфликтов имен команд в сеансе.
ПРИОРИТЕТ КОМАНД
Если сеанс содержит команды с одинаковыми именами, Windows PowerShell использует следующие правила для выбора команд для выполнения.
Эти правила имеют очень важное значение при добавлении команд в сеанс из модулей, оснасток и других сеансов.
– Если указан путь к команде, Windows PowerShell выполняет команду в расположении, указанном в пути.
Например, следующая команда запускает сценарий FindDocs.ps1 в каталоге C:\TechDocs:
C:\TechDocs\FindDocs.ps1
Для обеспечения безопасности Windows PowerShell не запускает исполняемые (машинные) команды, включая сценарии Windows PowerShell, до тех пор, пока команда не будет расположена по пути, указанном в переменной среды Path ($env:path), или пока не будет указан путь к файлу сценария.
Чтобы запустить сценарий, который находится в текущем каталоге, укажите полный путь или введите точку (.) для представления текущего каталога.
Например, чтобы запустить файл FindDocs.ps1 в текущем каталоге, введите:
.\FindDocs.ps1
– Если путь не указан, Windows PowerShell использует следующий порядок приоритета при выполнении команд.
1. Alias
2. Function
3. Cmdlet
4. Native Windows commands
Таким образом, если ввести «help», Windows PowerShell сначала ищет псевдоним с именем «help», затем функцию с именем «Help» и, наконец, командлет с именем «Help». Сначала запускается первый найденный элемент «help».
Например, если в сеансе имеется функция Get-Map и импортируется командлет Get-Map. По умолчанию, когда вводится «Get-Map», Windows PowerShell запускает функцию Get-Map.
– Если сеанс содержит элементы одного типа с одинаковым именем, например два командлета с одинаковым именем, Windows PowerShell запускает самый последний добавленный в сеанс элемент.
Например, если есть командлет Get-Date и импортируется другой командлет Get-Date, при вводе «Get-Date» Windows PowerShell по умолчанию запустит самый последний импортированный командлет.
СКРЫТЫЕ И ЗАМЕНЕННЫЕ ЭЛЕМЕНТЫ
В результате выполнения этих правил элементы можно заменять или скрывать элементами с такими же именами.
– Элементы считаются скрытыми, если можно по-прежнему получать доступ к исходному элементу, например путем указания имени элемента с именем модуля или оснастки.
Например, при импорте функции, имя которой совпадает с именем командлета в сеансе, командлет скрывается (но не заменяется), поскольку он был импортирован из оснастки или модуля.
– Элементы считаются замененными или перезаписанными, если отсутствует доступ к исходному элементу.
Например, при импорте переменной, имя которой совпадает с именем переменной в сеансе, исходная переменная заменяется и больше не доступна. Нельзя определить переменную с именем модуля.
Кроме того, при вводе функции в командной строке и последующем импорте функции с тем же именем исходная функция заменяется и больше не доступна.
ПОИСК СКРЫТЫХ КОМАНД
Параметр All командлета Get-Command возвращает все команды с указанным именем, даже если они скрыты или заменены. Начиная с Windows PowerShell 3.0, по умолчанию командлет Get-Command возвращает только команды, которые запускаются при вводе имени команды.
В следующих примерах сеанс содержит функцию Get-Date и командлет Get-Date.
Следующая команда возвращает команду Get-Date, запускаемую при вводе «Get-Date».
PS C:\> Get-Command Get-Date
CommandType Name ModuleName
----------- ---- ----------
Function get-date
Следующая команда использует параметр All для возвращения всех команд Get-Date.
PS C:\> Get-Command Get-Date -All
CommandType Name ModuleName
----------- ---- ----------
Function get-date
Cmdlet Get-Date Microsoft.PowerShell.Utility
ВЫПОЛНЕНИЕ СКРЫТЫХ КОМАНД
Конкретные команды можно выполнять, указав свойства элемента, отличающие команду от других команд, которые могут иметь то же имя.
Этот метод можно использовать для выполнения любой команды, однако он особенно полезен для выполнения скрытых команд.
Этот метод рекомендуется использовать при написании сценариев, предназначенных для распространения, поскольку невозможно предсказать, какие команды могут находиться в сеансе, в котором выполняется сценарий.
ПОЛНЫЕ ИМЕНА
Можно запускать команды, которые были импортированы из оснастки или модуля Windows PowerShell или из другого сеанса, указав имя команды с именем модуля или оснастки, в которых она была создана.
Можно определять команды, но нельзя определять переменные или псевдонимы.
Например, если командлет Get-Date из оснастки Microsoft.PowerShell.Utility скрыт псевдонимом, функцией или командлетом с тем же именем, его можно запустить с помощью полного имени оснастки командлета.
Microsoft.PowerShell.Utility\Get-Date
Чтобы выполнить команду New-Map, добавленную модулем MapFunctions, используйте ее имя с указанием модуля.
MapFunctions\New-Map
Чтобы найти оснастку или модуль, из которого была импортирована команда, используйте свойство ModuleName команд.
(Get-Command <command-name>).ModuleName
Например, чтобы найти источник командлета Get-Date, введите следующую команду:
PS C:\>(Get-Command Get-Date).ModuleName
Microsoft.PowerShell.Utility
ОПЕРАТОР ВЫЗОВА
Оператор вызова (&) можно использовать для выполнения любой команды, получаемой с помощью командлета Get-ChildItem (псевдоним — «dir»), Get-Command или Get-Module.
Чтобы выполнить команду, заключите команду Get-Command в круглые скобки и с помощью оператора вызова (&) запустите команду.
&(Get-Command ...)
- or -
&(dir ... )
Например, если имеется функция Map, скрытая псевдонимом Map, используйте следующую команду для запуска функции.
&(Get-Command -Name Map -Type function)
- or -
&(dir function:\map)
Скрытую команду также можно сохранить в переменной для упрощения ее выполнения.
Например, следующая команда сохраняет функцию Map в переменной $myMap, а затем использует оператор вызова для ее запуска.
$myMap = (Get-Command -Name map -Type function)
&($myMap)
Если команда была создана в модуле, для ее выполнения можно использовать следующий формат.
& <PSModuleInfo-object> <command>
Например, чтобы запустить командлет Add-File в модуле FileCommands, используйте следующую последовательность команд.
$FileCommands = get-module -name FileCommands
& $FileCommands Add-File
ЗАМЕНЕННЫЕ ЭЛЕМЕНТЫ
Элементы, которые не были импортированы из модуля или оснастки, например функции, переменные и псевдонимы, создаваемые в сеансе или добавляемые с помощью профиля, можно заменить командами с такими же именами. Замененные элементы больше не доступны.
Переменные и псевдонимы заменяются всегда (даже в том случае, если они были импортированы из модуля или оснастки), поскольку для их выполнения нельзя использовать оператор вызова или полное имя.
Например, при вводе функции Get-Map в сеансе и импорте функции Get-Map происходит замена исходной функции. Ее нельзя получить в текущем сеансе.
ПРЕДОТВРАЩЕНИЕ КОНФЛИКТОВ ИМЕН
Наилучшим способом управления конфликтами имен является их предотвращение. При именовании команд используйте имена, которые являются специализированными или уникальными. Например, добавьте к существительным в командах свои инициалы или сокращенное название компании.
Кроме того, при импорте команд в сеанс из модуля Windows PowerShell или из другого сеанса используйте параметр Prefix командлета Import-Module или Import-PSSession для добавления префикса к существительным в именах команд.
Например, следующая команда позволяет избежать конфликта командлетов Get-Date и Set-Date, которые входят в Windows PowerShell, при импорте модуля DateFunctions.
Import-Module -Name DateFunctions -Prefix ZZ
Дополнительные сведения см. в разделе Import-Module и Import-PSSession.
СМ. ТАКЖЕ
about_Path_Syntax
about_Aliases
about_Functions
Псевдоним (поставщик)
Функция (поставщик)
Get-Command
Import-Module
Import-PSSession