繁体   English   中英

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

[英]Is there a command for checking alias existence in PowerShell?

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

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

您可以使用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*将匹配驱动器C的根目录中以l开头的所有文件完全相同。

Test-Path是一个命令行开关,它测试路径是否仅在至少一个现有对象与该路径匹配时才引用具有True结果的现有对象。 所以通常你会用它来测试一个文件是否存在但同样你可以测试是否存在任何可用合适的限定符来寻址的东西。

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

有一个仅为Aliases提供的提供程序和一个Alias:location,因此您也可以使用Get-Childitem。

Get-Childitem alias: 

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

Set-Alias "foo" MyFooFunction -Force

if(!(Get-Alias -Name foo))如果别名不存在则会出错。

(在第5版中测试)

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

If ((Test-Path alias:foo) -eq $false) {New-Alias -name foo -value Get-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'}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM