如何覆盖Powershell中的函数

use*_*105 5 powershell overriding winforms

我在网上可以找到关于这样做的所有内容是覆盖cmdlet,但我需要覆盖一个Windows窗体事件.这是我需要的C#等价物:

protected override Point ScrollToControl(Control activeControl)
{
    return this.AutoScrollPosition;
}
Run Code Online (Sandbox Code Playgroud)

他们说你只是在相同的范围内使用函数的名称,它会自动覆盖它,但这对我不起作用.

bri*_*ist 7

如果你指的是一种方法,Chris Dent的回答很好地涵盖了这一点!

对于本机PowerShell cmdlet /函数,我将在此处从ServerFault复制我的答案:

是的,您可以Get-ChildItem在Powershell中覆盖或任何其他cmdlet.

命名你的功能相同

如果在同一范围内创建具有相同名称的函数,则将使用您的函数.

例:

Function Get-ChildItem {
[CmdletBinding()]
param(
    # Simulate the parameters here
)
    # ... do stuff
}
Run Code Online (Sandbox Code Playgroud)

使用别名

创建自己的函数,然后为该函数创建一个别名,其名称与要覆盖的cmdlet相同.

例:

Function My-GetChildItem {
[CmdletBinding()]
param(
    # Simulate the parameters here
)
    # ... do stuff
}

New-Alias -Name 'Get-ChildItem' -Value 'My-GetChildItem' -Scope Global
Run Code Online (Sandbox Code Playgroud)

这种方式很好,因为在不踩踏内置函数的情况下测试函数更容易,并且可以控制cmdlet何时被覆盖或不在代码中.

要删除别名:

Remove-Item 'Alias:\Get-ChildItem' -Force
Run Code Online (Sandbox Code Playgroud)

了解命令优先权

about_Command_Precedence列出了解释不同类型命令的顺序:

如果未指定路径,Windows PowerShell在运行命令时将使用以下优先顺序:

  1. 别号
  2. 功能
  3. 小命令
  4. 本机Windows命令