在PowerShell中是否有用于检查别名的命令?

时间:2014-01-03 14:49:23

标签: powershell powershell-v3.0

是否有PowerShell命令允许您检查是否存在别名?

(我一直在网上看看,看起来不像。)

8 个答案:

答案 0 :(得分:20)

您可以使用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结果的现有对象。所以通常你会用它来测试一个文件是否存在但同样你可以测试是否存在任何可用合适的限定符来寻址的文件。

答案 1 :(得分:9)

我认为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 }

答案 2 :(得分:5)

是的,使用Get-Alias命令。

示例:

Get-Alias -Name spps;

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

要获取处理别名的所有命令的列表,请使用Get-Command

Get-Command -Name *alias;

答案 3 :(得分:3)

只有Aliases和Alias:location的提供程序,所以您也可以使用Get-Childitem。

Get-Childitem alias: 

答案 4 :(得分:1)

(在第5版中测试)

以下是我如何使用上述内容(非常感谢所有人!):

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

这是每个将成为或将成为模块的脚本的底部。如果别名已经存在,它会在用户系统上添加别名而不会抛出错误或覆盖现有别名。

答案 5 :(得分:0)

如果您只想设置别名(如果它尚不存在),则另一个选项是使用-Force中的Set-Alias参数,因此您不会收到错误,说明别名已经存在:

Set-Alias "foo" MyFooFunction -Force

如果别名不存在,if(!(Get-Alias -Name foo))之类的内容会出错。

答案 6 :(得分: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'}

捕获异常并检查 是否与存在的布尔逻辑的条件匹配。我发现这种方法很有效,除非异常与你期望的不同。

答案 7 :(得分:0)

受邓肯和达纳提供的答案启发,我创建了以下功能。我建议将其添加到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