如何为PowerShell自定义Get-ChildItemUnix函数添加Terminal-Icons图标
实现PowerShell自定义ll命令显示文件图标
你当前的ll别名对应自定义函数Get-ChildItemUnix,因为使用Format-Table输出纯文本表格,丢失了文件类型识别的上下文,所以无法显示文件图标。要实现类似原生带图标ls的效果,需要借助Terminal-Icons模块,并调整函数逻辑,具体步骤如下:
1. 安装Terminal-Icons模块
打开PowerShell(以管理员身份运行),执行以下命令安装模块:
Install-Module -Name Terminal-Icons -Scope CurrentUser -Force
2. 修改自定义函数
根据需求,有两种实现方式:
方式一:保留原生对象,让Terminal-Icons自动添加图标
这种方式输出原始的文件系统对象,Terminal-Icons会自动在名称前添加对应图标,同时显示自定义的Owner属性和链接目标:
function Get-ChildItemUnix { Get-ChildItem $Args[0] | ForEach-Object { # 给对象添加Owner属性 $_ | Add-Member -MemberType NoteProperty -Name 'Owner' -Value (Get-Acl $_.FullName).Owner -PassThru } | Select-Object Mode, Owner, Length, LastWriteTime, @{ Name = 'Name' Expression = { if ($_.Target) { "$($_.Name) -> $($_.Target)" } else { $_.Name } } } } New-Alias ll Get-ChildItemUnix
方式二:手动添加图标到自定义名称列
如果需要更灵活的控制,可以手动调用Terminal-Icons的API获取图标,拼接到自定义名称前:
function Get-ChildItemUnix { Get-ChildItem $Args[0] | Format-Table Mode, @{ N='Owner' E={(Get-Acl $_.FullName).Owner} }, Length, LastWriteTime, @{ N='Name' E={ $icon = Get-TerminalIcon $_ $displayName = if ($_.Target) { "$($_.Name) -> $($_.Target)" } else { $_.Name } "$icon $displayName" } } } New-Alias ll Get-ChildItemUnix
3. 启用模块
每次打开PowerShell时,需要导入Terminal-Icons模块才能显示图标,你可以把导入命令添加到PowerShell配置文件中,实现自动加载:
# 打开配置文件 notepad $PROFILE # 在文件中添加以下内容并保存 Import-Module Terminal-Icons
完成以上步骤后,执行ll命令就能看到带文件/文件夹图标的结果了。
内容的提问来源于stack exchange,提问作者yeferson cordoba
相关产品推荐
相关产品推荐

