Edit: There’s a quick addition at the bottom of this post. I tried something else, it worked, and so I decided to include it.
I started writing a PowerShell function to replicate the work of an old executable called ICSWEEP. ICSWEEP “is a command-line utility to clear the Temporary Internet Files Cache and/or the TEMP files folder of ALL user profiles that are NOT in use when this command is executed.” ICSWEEP Information. I may or may not walk through the process of writing this function here; it’s to be determined. What I do want to discuss for sure, however, is the last switch in the above image. It’s /?.
We cannot add ? parameter to a function. Below is an image of the message when we attempt to do that in VS Code.
That’s right, right!? You do remember the $? variable. It stores the execution status of the last command as True or False. Instead of ? as a parameter, I used the value of Help. Therefore, someone can invoke my function and use -Help to get help with the function. But could they?
I sat there, wondering, can you create a parameter of a function so that it’ll return its own, comment-based help? It turns out you can. Here’s the early stage of this function. It consists of the comment-based help, a few parameters, and a small amount of code.
function Clear-UserTemporaryFile {
<#
.SYNOPSIS
The Clear-UserTemporaryFile command ...
.DESCRIPTION
.PARAMETER <Parameter>
.EXAMPLE
.NOTES
Name: Clear-UserTemporaryFile
Author: Tommy Maynard
Comments: --
Last Edit: 12/13/2022 [1.0.0]
Version: 1.0.0
#>
Param (
[Parameter()]
[switch]$ALL,
[Parameter()]
[string]$TIF,
[Parameter()]
[string]$TMP,
[Parameter()]
[string]$SIZE,
[Parameter()]
[switch]$HELP
)
if ($HELP) {
Get-Help -Name "$($MyInvocation.MyCommand.Name)"
Exit
}
}
In the above code, I added a simple if statement. It monitors whether or not the Help parameter is used when the function is invoked. If it is, it runs the Get-Help cmdlet against the name of the executing function—itself—using the $MyInvocation variable and then exits the function.
Clear-UserTemporaryFile -Help
NAME
Clear-UserTemporaryFile
SYNOPSIS
The Clear-UserTemporaryFile command ...
SYNTAX
Clear-UserTemporaryFile [-ALL] [[-TIF] <String>] [[-TMP] <String>] [[-SIZE] <String>] [-HELP] [<CommonParameters>]
DESCRIPTION
RELATED LINKS
REMARKS
To see the examples, type: "Get-Help Clear-UserTemporaryFile -Examples"
For more information, type: "Get-Help Clear-UserTemporaryFile -Detailed"
For technical information, type: "Get-Help Clear-UserTemporaryFile -Full"
At this point, some of you may already know where I’m going to go next. There was something else I had forgotten about every cmdlet and function written. They all have something in common. And what’s that? There is a way to return a command’s help using, of all things, the question mark! Take a look using the built-in Get-Verb and Get-Command cmdlets below.
Get-Verb -?
NAME
Get-Verb
SYNTAX
Get-Verb [[-Verb] <string[]>] [[-Group] {Common | Communications | Data | Diagnostic | Lifecycle | Other |
Security}] [<CommonParameters>]
ALIASES
None
REMARKS
Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
-- To download and install Help files for the module that includes this cmdlet, use Update-Help.
-- To view the Help topic for this cmdlet online, type: "Get-Help Get-Verb -Online" or
go to https://go.microsoft.com/fwlink/?LinkID=2097026.
Get-Command -?
NAME
Get-Command
SYNTAX
Get-Command [[-ArgumentList] <Object[]>] [-Verb <string[]>] [-Noun <string[]>] [-Module <string[]>]
[-FullyQualifiedModule <ModuleSpecification[]>] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All]
[-ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [<CommonParameters>]
Get-Command [[-Name] <string[]>] [[-ArgumentList] <Object[]>] [-Module <string[]>] [-FullyQualifiedModule
<ModuleSpecification[]>] [-CommandType {Alias | Function | Filter | Cmdlet | ExternalScript | Application | Script
| Configuration | All}] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported] [-ParameterName
<string[]>] [-ParameterType <PSTypeName[]>] [-UseFuzzyMatching] [-UseAbbreviationExpansion] [<CommonParameters>]
ALIASES
gcm
REMARKS
Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
-- To download and install Help files for the module that includes this cmdlet, use Update-Help.
-- To view the Help topic for this cmdlet online, type: "Get-Help Get-Command -Online" or
go to https://go.microsoft.com/fwlink/?LinkID=2096579.
This means I don’t even need a Help parameter. PowerShell already has this covered, and here’s the proof.
Clear-UserTemporaryFile -?
NAME
Clear-UserTemporaryFile
SYNOPSIS
The Clear-UserTemporaryFile command ...
SYNTAX
Clear-UserTemporaryFile [-ALL] [[-TIF] <String>] [[-TMP] <String>] [[-SIZE] <String>] [-HELP] [<CommonParameters>]
DESCRIPTION
RELATED LINKS
REMARKS
To see the examples, type: "Get-Help Clear-UserTemporaryFile -Examples"
For more information, type: "Get-Help Clear-UserTemporaryFile -Detailed"
For technical information, type: "Get-Help Clear-UserTemporaryFile -Full"
Edit: We know that we were able to use this PowerShell to return the help for our function,
Get-Help -Name "$($MyInvocation.MyCommand.Name)"
but we could’ve just as easily done this:
Invoke-Expression -Command "$($MyInvocation.MyCommand.Name) -?"
The first option invokes the Get-Help cmdlet against our function. The second option invokes the same function that’s already being invoked, adding a -? to the end of the complete command.

