Есть ли команда PowerShell, которая позволяет вам проверить, существует ли псевдоним?
(Я смотрю в Интернете, и это не похоже на него.)
Есть ли команда PowerShell, которая позволяет вам проверить, существует ли псевдоним?
(Я смотрю в Интернете, и это не похоже на него.)
Я думаю, что Get-Alias - это то, что вы ищете.
MS Документация: http://technet.microsoft.com/en-gb/library/ee176839.aspx
Пример для IF:
$ar = get-alias -name f*
if($ar.count -lt 1){ do stuff }
Вы можете использовать Test-Path
для этого:
PS C:\> test-path alias:l*
True
PS C:\> test-path alias:list*
False
Просто используйте:
if (Test-Path alias:list*) { ... }
или
if(!(Test-Path alias:list*)) { ... }
если вы хотите что-то сделать, когда псевдоним не существует.
Как писали другие, Get-Alias
также работает, но Test-Path
избегает создания списка псевдонимов, поэтому может быть каждый раз немного быстрее, если вам это интересно.
Дальнейшее объяснение:
Powershell использует имена путей для доступа намного больше, чем просто файлы, поэтому, хотя префикс C:
позволяет вам обращаться к файлам на диске C, alias:
позволяет вам обращаться к псевдонимам, а другие квалификаторы позволяют вам получать доступ к таким функциям, как функции, ключи реестра, сертификаты безопасности и т.д. Таким образом, alias:l*
- это путь к шаблону, который будет соответствовать всем псевдонимам, начинающимся с буквы l
точно так же, как C:l*
будет соответствовать всем файлам, начинающимся с l
в корне диска C.
Test-Path
- это команда, которая проверяет, ссылается ли путь на существующий объект с результатом True, только если по крайней мере один существующий объект соответствует этому пути. Поэтому обычно вы должны использовать его для проверки наличия файла, но в равной степени вы можете проверить наличие чего-либо, что адресуется с подходящим квалификатором.
Да, используйте команду Get-Alias
.
Пример:
Get-Alias -Name spps;
# If statement example
if (Get-Alias -Name spps) {
# Do something here
}
Чтобы получить список всех команд, относящихся к псевдонимам, используйте Get-Command
Get-Command -Name *alias;
Существует поставщик только для псевдонимов и псевдоним: местоположение, поэтому вы также можете использовать Get-Childitem.
Get-Childitem alias:
(проверено в версии 5)
Вот как я использую приведенное выше (большое спасибо всем!):
If ((Test-Path alias:foo) -eq $false) {New-Alias -name foo -value Get-Foo}
Это находится в нижней части каждого script, который является или станет модулем. Он помещает псевдоним в пользовательскую систему, не выкидывая ошибку или перезаписывая существующий псевдоним, если псевдоним уже существует.
Другой вариант, если вы просто хотите установить псевдоним, если он еще не существует, - это использовать параметр -Force
в Set-Alias
, поэтому вы не получите сообщение об ошибке, когда псевдоним уже существует:
Set-Alias "foo" MyFooFunction -Force
Такие вещи, как if(!(Get-Alias -Name foo))
ошибка, если псевдоним не существует.
Просто хотел добавить еще один способ добиться этого.
$ErrorActionPreference = 'Stop'
$ee = @() # Exception catcher
$Newalias = 'wv'
try{
New-Alias -Name $Newalias -Value Write-Verbose | Out-Null
}
catch{$ee += $_}
if (($ee -ne $null) -and ($ee.CategoryInfo.Category.ToString() -match 'ResourceExists')){Write-Warning "Alias $Newalias already exists";break}
else{Write-Verbose 'Continue on'}
Поймать исключение и проверить, соответствует ли это условию логической логики существования. Я нашел, что это работает хорошо, если исключение не так, как вы ожидали.
Вдохновленный ответами Дункана и Даны, я создал следующую функцию. я рекомендую добавить его в файл, указанный вашей переменной PowerShell $ PROFILE.
function New-AliasSafe {
param(
[Parameter(Mandatory=$true)]
[string]
$Name,
[Parameter(Mandatory=$true)]
[string]
$Value
)
if (!(Test-Path alias:$Name)) {
New-Alias -Name $Name -Value $Value -Scope Global
Write-Verbose "Alias $Name created successfully!"
} else {
Write-Verbose "Another alias with $Name already exists!"
}
}
Теперь вы можете просто вызывать эту функцию всякий раз, когда хотите импортировать псевдоним.
New-AliasSafe -Name wo -Value Write-Output
Если вы хотите узнать, был ли псевдоним успешно создан или нет, вы можете вместо этого вызвать эту функцию.
New-AliasSafe -Name wo -Value Write-Output -Verbose