我希望Get-ChildItem -force
在我输入ll
时执行,并且我已在profile.ps1
中执行此操作:
New-Alias -Name ll -Value Get-ChildItem -force
但是,当我输入ll
时,我可以看到-force
参数未被使用。我做错了什么?
编辑:我真正希望实现的是显示文件夹中的所有文件,即使它们被隐藏了。我希望将其绑定到ll
。
答案 0 :(得分:3)
你不能用别名做到这一点。别名实际上只是命令的不同名称,它们不能包含参数。
可以做的是,写一个函数而不是使用别名:
function ll {
Get-ChildItem -Force @args
}
在这种情况下,您不会获得参数的标签完成,因为该函数不会公布任何参数(即使Get-ChildItem
的所有参数都通过并且正常工作)。您可以通过有效地复制函数的Get-ChildItem
的所有参数来解决这个问题,类似于PowerShell自己的help
函数的编写方式(您可以通过Get-Content Function:help
检查其源代码)。
答案 1 :(得分:1)
要添加到Joey's excellent answer,这是how you can generate Get-ChildItem
的代理命令(不包括特定于提供商的参数):
# Gather CommandInfo object
$CommandInfo = Get-Command Get-ChildItem
# Generate metadata
$CommandMetadata = New-Object System.Management.Automation.CommandMetadata $CommandInfo
# Generate cmdlet binding attribute and param block
$CmdletBinding = [System.Management.Automation.ProxyCommand]::GetCmdletBindingAttribute($CommandMetadata)
$ParamBlock = [System.Management.Automation.ProxyCommand]::GetParamBloc($CommandMetadata)
# Register your function
$function:ll = [scriptblock]::Create(@'
{0}
param(
{1}
)
$PSBoundParameters['Force'] = $true
Get-ChildItem @PSBoundParameters
'@-f($CmdletBinding,$ParamBlock))