如何为New-Alias命令的值提供参数?

时间:2017-02-08 08:39:28

标签: powershell

我希望Get-ChildItem -force在我输入ll时执行,并且我已在profile.ps1中执行此操作:

New-Alias -Name ll -Value Get-ChildItem -force

但是,当我输入ll时,我可以看到-force参数未被使用。我做错了什么?

编辑:我真正希望实现的是显示文件夹中的所有文件,即使它们被隐藏了。我希望将其绑定到ll

2 个答案:

答案 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))