PowerShell 7.1,如何从函数名称列表中获取别名
PowerShell 7.1, How do I Get Aliases from a List of Functions Names
我是 Powershell 的新手,所以我可能遗漏了一些东西,所以听说:
注意:我的所有函数都以我的首字母作为前缀Function mts_do_something()
我正在尝试遍历函数列表 (Get-Command mts_*
) 并获取它们的关联别名。
然而,有些函数没有别名(所以 Get-Alias -Definition mts_do_something
),这个命令 returns 是一个错误。所以我遍历了别名列表并尝试将它们与 '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
问题:虽然此代码生成了所需的输出,但是否有一种优雅的方法来执行此操作?
尝试这样的事情
Get-Command -Name mts_* | ForEach-Object {
$CurObj = $_.Name
$Aliases = Get-Alias | Where-Object { $_.Definition -like $CurObj}
[pscustomobject]@{Command = $CurObj;Aliases = $Aliases}
}
this command returns an error.
您可以简单地忽略这些错误,使用common -ErrorAction
parameter,这简化了您的方法:
Get-Command mts_* | ForEach-Object { Get-Alias -ErrorAction Ignore -Definition $_ }
警告:这不会从 auto-loading modules 中找到 尚未加载(导入)的命令的别名 进入当前会话;请注意,此类模块是 隐式 在您第一次调用它们的任何 非别名 命令时加载。
类似地,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
{ '->' }
script block is a (simple) example of a , which are typically hashtable-based (@{ ... }
),在 Format-Table
的情况下甚至允许您通过 [=27= 控制列宽]条目。
你会得到类似的东西:
foo -> mts_foo
bar -> mts_bar
我是 Powershell 的新手,所以我可能遗漏了一些东西,所以听说:
注意:我的所有函数都以我的首字母作为前缀Function mts_do_something()
我正在尝试遍历函数列表 (Get-Command mts_*
) 并获取它们的关联别名。
然而,有些函数没有别名(所以 Get-Alias -Definition mts_do_something
),这个命令 returns 是一个错误。所以我遍历了别名列表并尝试将它们与 '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
问题:虽然此代码生成了所需的输出,但是否有一种优雅的方法来执行此操作?
尝试这样的事情
Get-Command -Name mts_* | ForEach-Object {
$CurObj = $_.Name
$Aliases = Get-Alias | Where-Object { $_.Definition -like $CurObj}
[pscustomobject]@{Command = $CurObj;Aliases = $Aliases}
}
this command returns an error.
您可以简单地忽略这些错误,使用common -ErrorAction
parameter,这简化了您的方法:
Get-Command mts_* | ForEach-Object { Get-Alias -ErrorAction Ignore -Definition $_ }
警告:这不会从 auto-loading modules 中找到 尚未加载(导入)的命令的别名 进入当前会话;请注意,此类模块是 隐式 在您第一次调用它们的任何 非别名 命令时加载。
类似地,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
{ '->' }
script block is a (simple) example of a @{ ... }
),在 Format-Table
的情况下甚至允许您通过 [=27= 控制列宽]条目。
你会得到类似的东西:
foo -> mts_foo
bar -> mts_bar