如何覆盖 Powershell 中的“get-childItem”命令?

jas*_*son 3 powershell

我可以覆盖这个命令吗?我想在 Powershell 中执行“Get-ChildItem”命令时做我自己的工作。

bri*_*ist 8

是的,您可以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. Cmdlet
  4. 本机 Windows 命令