Есть ли команда PowerShell, позволяющая проверить, существует ли псевдоним или нет?Есть ли команда для проверки существования псевдонима в PowerShell?
(Я смотрел вокруг в Интернете, и он не похож на него.)
Есть ли команда 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 }
Да, используйте команду Get-Alias
.
Пример:
Get-Alias -Name spps;
# If statement example
if (Get-Alias -Name spps) {
# Do something here
}
Чтобы получить список всех команд, которые имеют дело с псевдонимами, используйте Get-Command
Get-Command -Name *alias;
Правильно, я все время сбрасывал тестовый путь. Приветствия. – IbrarMumtaz
Как вы можете использовать это в выражении if? вы можете использовать его с условной логикой? Похоже, если Alias не существует, идите вперед и установите его. Такого рода вещи. – IbrarMumtaz
Оператор 'if' по умолчанию экзистенциальен, поэтому все, что вам нужно сделать, это сказать:' if (
Существует провайдер только для псевдонимов, и Alias: место, так что вы можете также использовать Get-ChildItem.
Get-Childitem alias:
Вы можете использовать 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, только если по крайней мере один существующий объект соответствует этому пути. Поэтому обычно вы должны использовать его для проверки того, существует ли файл, но в равной степени вы можете проверить наличие чего-либо, что адресуется с помощью подходящего определителя.
Я предпочитаю это решение. Когда вы проверяете наличие псевдонима, и псевдоним не существует. Test-Path не отображает предупреждающее сообщение, поскольку командлет Get-Alias делает («Get-Alias: эта команда не может найти соответствующий псевдоним, потому что псевдоним с именем» \ alias-of-the-command 'не существует.) – kri
Я не понимаю ничего, что вы сказали в этом ответе. – Andrew
@ Андрей, может быть, если бы вы сказали, что именно вы не понимаете, тогда я мог бы улучшить ответ? Мне кажется, что когда спрошено «есть ли команда для проверки существования псевдонима», и я говорю «вы можете использовать« Test-Path »для этого», это явный ответ, но я рад расширить все, что неясно , – Duncan
Другим вариант, если вы просто хотите установить псевдоним, если он уже не существует, чтобы использовать параметр -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'}
поймать исключение и проверить, если что соответствует условию булевой логики существования. Я нашел, что это работает хорошо, если исключение не так, как вы ожидали.
(проверено в версии 5)
Вот как я использую выше (Большое спасибо всем!):
If ((Test-Path alias:foo) -eq $false) {New-Alias -name foo -value Get-Foo}
Это в нижней части каждого скрипта, который является или станет модуль. Он помещает псевдоним в систему пользователя, не вызывая ошибки или перезаписывая существующий псевдоним, если псевдоним уже существует.
Именно то, что я искал ... как насчет ==> if (get-alias -name list * | Measure |? -Eq 0) {# do work} <=== будет ли это Работа? – IbrarMumtaz
У вас нет подсказки с подсказкой прямо перед вами? – EBGreen
@IbrarMumtaz, ваша команда, использующая 'Measure', выглядит излишней. 'if (! (get-alias -name list *)) {write-output" No alias "}' – Duncan