Edit: There’s a fast addition on the backside of this publish. I attempted one thing else, it labored, and so I made a decision to incorporate it.
I began writing a PowerShell operate to copy the work of an outdated executable referred to as ICSWEEP. ICSWEEP “is a command-line utility to clear the Non permanent Web Information Cache and/or the TEMP recordsdata folder of ALL consumer profiles which might be NOT in use when this command is executed.” ICSWEEP Info. I’ll or might not stroll by the method of scripting this operate right here; it’s to be decided. What I do need to talk about for positive, nonetheless, is the final change within the above picture. It’s /?
.
We can not add ?
parameter to a operate. Beneath is a picture of the message after we try to try this in VS Code.
That’s proper, proper!? You do bear in mind the $?
variable. It shops the execution standing of the final command as True or False. As a substitute of ?
as a parameter, I used the worth of Assist. Subsequently, somebody can invoke my operate and use -Assist
to get assist with the operate. However may they?
I sat there, questioning, are you able to create a parameter of a operate in order that it’ll return its personal, comment-based assist? It seems you’ll be able to. Right here’s the early stage of this operate. It consists of the comment-based assist, a couple of parameters, and a small quantity of code.
operate Clear-UserTemporaryFile { <# .SYNOPSIS The Clear-UserTemporaryFile command ... .DESCRIPTION .PARAMETER <Parameter> .EXAMPLE .NOTES Identify: Clear-UserTemporaryFile Writer: Tommy Maynard Feedback: -- Final Edit: 12/13/2022 [1.0.0] Model: 1.0.0 #> Param ( [Parameter()] [switch]$ALL, [Parameter()] [string]$TIF, [Parameter()] [string]$TMP, [Parameter()] [string]$SIZE, [Parameter()] [switch]$HELP ) if ($HELP) { Get-Assist -Identify "$($MyInvocation.MyCommand.Identify)" Exit } }
Within the above code, I added a easy if
assertion. It screens whether or not or not the Assist parameter is used when the operate is invoked. Whether it is, it runs the Get-Assist
cmdlet towards the identify of the executing operate—itself—utilizing the $MyInvocation
variable after which exits the operate.
Clear-UserTemporaryFile -Assist
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, sort: "Get-Assist Clear-UserTemporaryFile -Examples" For extra data, sort: "Get-Assist Clear-UserTemporaryFile -Detailed" For technical data, sort: "Get-Assist Clear-UserTemporaryFile -Full"
At this level, a few of you might already know the place I’m going to go subsequent. There was one thing else I had forgotten about each cmdlet and performance written. All of them have one thing in frequent. And what’s that? There’s a strategy to return a command’s assist utilizing, of all issues, the query mark! Have a look utilizing the built-in Get-Verb
and Get-Command
cmdlets under.
Get-Verb -?
NAME Get-Verb SYNTAX Get-Verb [[-Verb] <string[]>] [[-Group] Safety] [<CommonParameters>] ALIASES None REMARKS Get-Assist can not discover the Assist recordsdata for this cmdlet on this laptop. It's displaying solely partial assist. -- To obtain and set up Assist recordsdata for the module that features this cmdlet, use Replace-Assist. -- To view the Assist subject for this cmdlet on-line, sort: "Get-Assist Get-Verb -On-line" 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 Cmdlet ] [-TotalCount <int>] [-Syntax] [-ShowCommandInfo] [-All] [-ListImported] [-ParameterName <string[]>] [-ParameterType <PSTypeName[]>] [-UseFuzzyMatching] [-UseAbbreviationExpansion] [<CommonParameters>] ALIASES gcm REMARKS Get-Assist can not discover the Assist recordsdata for this cmdlet on this laptop. It's displaying solely partial assist. -- To obtain and set up Assist recordsdata for the module that features this cmdlet, use Replace-Assist. -- To view the Assist subject for this cmdlet on-line, sort: "Get-Assist Get-Command -On-line" or go to https://go.microsoft.com/fwlink/?LinkID=2096579.
This implies I don’t even want a Assist parameter. PowerShell already has this lined, and right 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, sort: "Get-Assist Clear-UserTemporaryFile -Examples" For extra data, sort: "Get-Assist Clear-UserTemporaryFile -Detailed" For technical data, sort: "Get-Assist Clear-UserTemporaryFile -Full"
Edit: We all know that we have been ready to make use of this PowerShell to return the assistance for our operate,
Get-Assist -Identify "$($MyInvocation.MyCommand.Identify)"
however we may’ve simply as simply completed this:
Invoke-Expression -Command "$($MyInvocation.MyCommand.Identify) -?"
The primary choice invokes the Get-Assist
cmdlet towards our operate. The second choice invokes the identical operate that’s already being invoked, including a -?
to the top of the entire command.