How Do You Override a Function in Powershell
If you're referring to a method, Chris Dent's answer covers that nicely!
For native PowerShell cmdlets/functions I will copy my answer from ServerFault here:
Yes, you can override Get-ChildItem
or any other cmdlet in Powershell.
Name Your Function The Same
If you make a function with the same name in the same scope, yours will be used.
Example:
Function Get-ChildItem {[CmdletBinding()]param( # Simulate the parameters here) # ... do stuff}
Using Aliases
Create your own function, and then create an alias to that function, with the same name as the cmdlet you want to override.
Example:
Function My-GetChildItem {[CmdletBinding()]param( # Simulate the parameters here) # ... do stuff}New-Alias -Name 'Get-ChildItem' -Value 'My-GetChildItem' -Scope Global
This way is nice because it's easier to test your function without stomping on the built-in function, and you can control when the cmdlet is overridden or not within your code.
To remove the alias:
Remove-Item 'Alias:\Get-ChildItem' -Force
Know the Command Precedence
about_Command_Precedence lists the order in which commands of different types are interpreted:
If you do not specify a path, Windows PowerShell uses the following precedence order when it runs commands:
- Alias
- Function
- Cmdlet
- Native Windows commands
You need to override the method on a class not a function.
You may be able to override it with a script block (I've not done much with the undisclosed Forms-based class so this is a guess).
The Force parameter will let Add-Member replace a method, depending a bit on the protection / access modifiers in the class. This approach would work well for overriding ToString for instance.
$baseObject | Add-Member Point -MemberType ScriptMethod -Value { return $this.AutoScrollPosition } -Force