2014-01-03 2 views

ответ

8

Я думаю, что 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 } 
+0

Именно то, что я искал ... как насчет ==> if (get-alias -name list * | Measure |? -Eq 0) {# do work} <=== будет ли это Работа? – IbrarMumtaz

+4

У вас нет подсказки с подсказкой прямо перед вами? – EBGreen

+0

@IbrarMumtaz, ваша команда, использующая 'Measure', выглядит излишней. 'if (! (get-alias -name list *)) {write-output" No alias "}' – Duncan

5

Да, используйте команду Get-Alias.

Пример:

Get-Alias -Name spps; 

# If statement example 
if (Get-Alias -Name spps) { 
    # Do something here 
} 

Чтобы получить список всех команд, которые имеют дело с псевдонимами, используйте Get-Command

Get-Command -Name *alias; 
+0

Правильно, я все время сбрасывал тестовый путь. Приветствия. – IbrarMumtaz

+0

Как вы можете использовать это в выражении if? вы можете использовать его с условной логикой? Похоже, если Alias ​​не существует, идите вперед и установите его. Такого рода вещи. – IbrarMumtaz

+1

Оператор 'if' по умолчанию экзистенциальен, поэтому все, что вам нужно сделать, это сказать:' if () {...} '. Я обновил свой пример кода :) –

2

Существует провайдер только для псевдонимов, и Alias: место, так что вы можете также использовать Get-ChildItem.

Get-Childitem alias: 
17

Вы можете использовать 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*)) { ... } 

, если вы хотите сделать что-то, когда псевдоним Безразлично» t существует.

Как и другие, Get-Alias также работает, но Test-Path избегает создания списка псевдонимов, поэтому может быть каждый раз немного быстрее, если вам это нужно.

Дальнейшее объяснение:

Powershell использует имена путей доступа к гораздо больше, чем просто файлы, так что в то время как C: префикса позволяет получить доступ к файлам на диск C, alias: позволяет получить доступ к алиасам и другие qualifers позволяют получить доступ к вещам, как функции, команды, ключи реестра, сертификаты безопасности и т. д. Так вот, alias:l* является подстановочным путем, который будет соответствовать всем псевдонимам, которые начинаются с буквой l точно так же, как C:l* будет соответствовать всем файлам, начинающемуся с l в корне диска C.

Test-Path является commandlet, который проверяет будет ли путь ссылаться на существующий объект с результатом True, только если по крайней мере один существующий объект соответствует этому пути. Поэтому обычно вы должны использовать его для проверки того, существует ли файл, но в равной степени вы можете проверить наличие чего-либо, что адресуется с помощью подходящего определителя.

+1

Я предпочитаю это решение. Когда вы проверяете наличие псевдонима, и псевдоним не существует. Test-Path не отображает предупреждающее сообщение, поскольку командлет Get-Alias ​​делает («Get-Alias: эта команда не может найти соответствующий псевдоним, потому что псевдоним с именем» \ alias-of-the-command 'не существует.) – kri

+0

Я не понимаю ничего, что вы сказали в этом ответе. – Andrew

+0

@ Андрей, может быть, если бы вы сказали, что именно вы не понимаете, тогда я мог бы улучшить ответ? Мне кажется, что когда спрошено «есть ли команда для проверки существования псевдонима», и я говорю «вы можете использовать« Test-Path »для этого», это явный ответ, но я рад расширить все, что неясно , – Duncan

0

Другим вариант, если вы просто хотите установить псевдоним, если он уже не существует, чтобы использовать параметр -Force в Set-Alias, так что вы не получите сообщение об ошибке сказав, что псевдоним уже существует:

Set-Alias "foo" MyFooFunction -Force 

Такие вещи, как ошибка if(!(Get-Alias -Name foo)), если псевдоним не существует.

0

Просто хотел бы добавить еще один способ для достижения этой цели ..

$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'} 

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

0

(проверено в версии 5)

Вот как я использую выше (Большое спасибо всем!):

If ((Test-Path alias:foo) -eq $false) {New-Alias -name foo -value Get-Foo} 

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

Смежные вопросы