Build Your Own PowerShell Cmdlet: Part 5 of 9

Build Your Own PowerShell Cmdlet: Part 5 of 9

  • Comments 2
  • Likes

Summary: Microsoft Windows PowerShell MVP, Sean Kearney, continues a series of guest blogs detailing building your own cmdlet.

Microsoft Scripting Guy, Ed Wilson, is here. Guest blogger and Windows PowerShell MVP, Sean Kearney, has written a series about building cmdlets. For more about Sean, see his previous guest blog posts.

Note This is Part 5 of a nine-part series about building your own Windows PowerShell cmdlet. Read the entire series as it unfolds.

Here’s Sean…

Yesterday, we introduced some common parameters that are now available to our cmdlet:

  • -Verbose

  • -Debug

  • -WarningAction

  • -WarningVariable

  • -ErrorAction

  • -ErrorVariable

  • -OutVariable

  • -OutBuffer

Now we can modify our existing advanced function to leverage some of these parameters.

We are already using the Write-Error cmdlet. We can also add Write-Debug in various points of the script to show the values of our variables for troubleshooting.

function global:ADD-LOGFILE{

 

[CmdletBinding(

DefaultParameterSetName=”Folder”,

SupportsShouldProcess=$True,

ConfirmImpact=’High’

)]

 

PARAM(

[STRING[]]$Folder="C:\PowerShell",

[STRING[]]$Preface="Logfile",

[STRING[]]$Extension=".log"

)

 

WRITE-DEBUG “`$Folder: $Folder”

WRITE-DEBUG “`$Preface: $Preface”

WRITE-DEBUG “`$Extension: $Extension”

 

# GET the Current Date for our Logfile

 

$Today=GET-DATE

WRITE-DEBUG “`$Today: $Today”

# Extract the Date removing the “/”

 

$Date=$Today.toshortdatestring().Replace(“/”,””)

WRITE-DEBUG “`$Date: $Date”

 

# Extract the Time removing the “:”

 

$Time=$Today.tostring(“HH:mm:ss”).Replace(“:”,”“)

WRITE-DEBUG “`$Time: $Time”

 

# Build our Filename

 

$Logfilename=$Folder+"\"+$Preface+”-“+$Date+”-“+$Time+$Extension

WRITE-DEBUG “`$Logfilename: $Logfilename”

 

# Test and ensure file does not already exist

 

IF (TEST-PATH -path $Logfilename)

 

{ WRITE-ERROR –message “Error: $Logfilename exists.” –category ‘WriteError’

 

# If file exists, return a status of Boolean $False for Unsuccessful

 

RETURN $Logfilename,$FALSE }

 

ELSE

 

{

 

# Create logfile

 

NEW-ITEM –Type File -path $Logfilename -Force | OUT-NULL

WRITE-DEBUG “$Logfilename successfully created”

 

# Return the Full path and filename if successful

 

RETURN $Logfilename,$TRUE

 

}

}

We’ll save this as a new Windows PowerShell script called addlogcmdlet.ps1 and execute it to create the new cmdlet in memory.

With these new changes to our cmdlet, we can troubleshoot and view the variables within the cmdlet (or whatever output we choose reveal) by adding the Verbose parameter.

Image of command output

We can even have our cmdlet pause and ask us what to do if an error occurs by leveraging the ErrorAction parameter.

Image of command output

~Sean

Thank you, Sean. The cmdlet is really coming together. Nice additions today. Guest Blogger Week will continue tomorrow when Sean will talk more about building a cmdlet.

I invite you to follow me on Twitter and Facebook. If you have any questions, send email to me at scripter@microsoft.com, or post your questions on the Official Scripting Guys Forum. See you tomorrow. Until then, peace.

Ed Wilson, Microsoft Scripting Guy

 

Your comment has been posted.   Close
Thank you, your comment requires moderation so it may take a while to appear.   Close
Leave a Comment
  • Ed,

    1) The tags html markup does not appear to be correct on this article.

    2) The html link associated with "the entire series" does not return any articles. Replacing "/guest/" with "/guest+blogger/" works better, but omits Part 5 due to item 1 above.

  • @TechieSponge, I hope I have the 2 issues resolved, thanks for commenting on them and bringing it to my attention.

    Ed