繁体   English   中英

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

[英]How to supply argument to value of New-Alias command?

我希望当我输入ll并且我的profile.ps1有此代码时, Get-ChildItem -force可以执行:

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

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

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

您不能使用别名来做到这一点。 别名实际上只是命令的不同名称,不能包含参数。

但是,您可以做的是编写一个函数而不使用别名:

function ll {
  Get-ChildItem -Force @args
}

但是,在这种情况下,您不会获得参数的制表符补全,因为该函数不会播发任何参数(即使Get-ChildItem所有参数都可以通过并起作用)。 您可以通过有效地复制该函数的Get-ChildItem所有参数来解决此问题,类似于PowerShell自己的help函数的编写方式(您可以通过Get-Content Function:help检查其源代码)。

要添加到Joey的出色答案中 ,这是如何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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM