我对Powershell相当陌生,所以我可能会缺少一些东西,所以请听:
注意:我所有的函数都以首字母开头 Function mts_do_something()
我正在尝试浏览功能列表(Get-Command mts_*
)并获取其关联的别名。
但是,某些函数没有别名(因此Get-Alias -Definition mts_do_something
),此命令返回错误。因此,我浏览了别名列表,并尝试将它们与“ GCM”中的项目进行匹配。
样例代码:
Get-Command mts_* | foreach-object -Process {
$name = $_.ToString()
$aliasName = ""
Get-Alias -Definition mts_* | ForEach-Object -Process {
if($_.Definition -eq $Name) {
$aliasName = $_.Name
}
}
if([string]::IsNullOrEmpty($aliasName.ToString().Trim()))
{
Write-Host " " $name.PadRight(30)
}
else
{
Write-Host " " $name.PadRight(30) " --> " $aliasName
}
}
样本输出:
mts_do_something
mts_my_function --> myf
mts_fix_car
mts_walk_dog --> wDog
问题:虽然此代码产生了所需的输出,但是有一种优雅的方法吗?
该命令返回错误。
你可以使用common参数简单地忽略这些错误,从而简化你的方法:-ErrorAction
Get-Command mts_* | ForEach-Object { Get-Alias -ErrorAction Ignore -Definition $_ }
警告:这不会从尚未加载(导入)到当前会话的自动加载模块中找到命令的别名;请注意,此类模块是在你首次调用其任何非别名命令时隐式加载的。
同样,仅报告当前加载(导入)的模块中的别名,因此该警告也适用于Scepticalist的答案,此外,它还有一个缺点,即必须调用以检索和过滤每个输入命令名的所有别名。Get-Alias
Get-Alias
请注意,Get-Alias
的输出格式同时包含别名和定义(目标命令),因此你将看到类似以下内容的内容:
CommandType Name Version Source
----------- ---- ------- ------
Alias foo -> mts_foo
Alias bar -> mts_bar
相反,如果你希望将两栏显示限制为别名名称及其定义,则可以使用Select-Object
:
Get-Command mts_* |
ForEach-Object { Get-Alias -ErrorAction Ignore -Definition $_ } |
Select-Object Name, Definition
使用的好处Select-Object
是它输出适合以后程序处理的对象。
你会得到类似以下内容的信息:
Name Definition
---- ----------
foo mts_foo
bar mts_date
但是,为了控制显示输出,可以改用Format-Table
,它可以使你更好地控制格式设置-但由于Format-*
cmdlet输出格式说明而不是原始数据,因此可以防止后续处理输出。
例如,以下内容更接近你的原始输出格式:
Get-Command mts_* |
ForEach-Object { Get-Alias -ErrorAction Ignore -Definition $_ } |
Format-Table Name, { '->' }, Definition -HideTableHeaders
的{ '->' }
脚本块是A的(简单的)示例计算属性,这是典型的散列表基(@{ ... }
),并在的情况下,Format-Table
甚至允许你通过控制列宽度width
条目。
你会得到类似以下内容的信息:
foo -> mts_foo
bar -> mts_bar