Advanced Windows PowerShell Scripting Video Training

Advanced Windows PowerShell Scripting Video Training
Advanced Windows PowerShell Scripting Video Training

Thursday, February 27, 2014

Get the PowerShell V3–ShowWindow in PowerShell V2

This week I’m delivering a PowerShell class in Virginia to an audience who will be using PowerShell V2 for a while longer.  I noticed that one of the features of V3 that they like is the –ShowWindow parameter of Get-Help.  Since this class is a 10 day tool making course, I decided to just create the tool for them.  What I decided to do was to have Notepad display the help file information for me.  This provides the critical “Search” capability that they are looking for.  I also decided to address one of the short comings of Get-Help –ShowWindow and that is it’s inability to open multiple help windows at the same time.  Below is the code.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

Function Show-V2ShowWindow

{

[cmdletBinding()]

Param(

    [Parameter(Mandatory=$True,

    ValueFromPipeline=$true)]

    [String[]]$Cmdlet

    )

 

    Begin {}

 

    Process

    {

        # Generate a full path to the currently logged in user's "Documents"

        # Folder

        $Path = "$($Env:HomeDrive)$($env:HOMEPATH)\Documents\PSHelpFile.txt"

       

        ForEach ($C in $Cmdlet)

        {

            Try

            {

                # Collect the full Help File information for the cmdlet.

                Get-Help $C -Full -ErrorAction Stop |

                    Out-File -FilePath $Path

       

                # Open the txt file in Notepad

                Invoke-Expression -Command "Notepad.exe $Path"

               

                #Pause to allow Notepad to load before loading the next help file.

                Start-Sleep -Milliseconds 250

               

                # Remove the temporary txt file.

                Remove-Item -Path $Path

            }

 

            Catch

            {

                # If no help file exists for this cmdlet, then display a warning.

                Write-Warning "No Help file Available"

            }

        } # END: ForEach ($C in $Cmdlet)

    } # END: Process

 

    End {}

 

<#

.SYNOPSIS

Displays the full help file in notepad.

 

.DESCRIPTION

Displays the full help file in notepad.  This allows for multiple help files

to be open for users in PowerShell V2 environments to simulate

the functionality of -ShowWindow in PowerShell V3

 

.PARAMETER Cmdlet

The Cmdlet or ABOUT_ file that you want to display.

 

.EXAMPLE

Get-V2ShowWindow Get-Date

 

Displays the full help file for Get-Date in Notepad.

 

.EXAMPLE

Show-V2ShowWindow -cmdlet Get-date, Get-Command

 

Opens two help files at the same time.

 

.EXAMPLE

"Get-date", "Get-Command" | Show-V2ShowWindow

 

Opens two help files at the same time.  When piping cmdlets in from the command line,

they must be enclosed in quotation marks.

 

.NOTES

==============================================================================

Author: Jason A. Yoder

Company: MCTExpert of Arizona

 

User assumes are risk and liability for executing this code.  As with

all PowerShell code, read and understand it before executing it in your

environment.

 

Licensing: This code may not be republished or utilized in part or in full

for any for profit product or publication without the expressed written

consent of MCTExpert of Arizona. 

 

Copyright © 2014 MCTExpert of Arizona.  All rights reserved.

==============================================================================

#>  

} # End: Function Show-V2ShowWindow 

Here are a few areas of interest.

Line Comments
16 I need to store a txt file temporarily so I need a location where I know the user will have write access so I’m going to use there “My Documents” folder.  To find it, I’m using two variables from PowerShell’s Environment PSProvider, Homedrive and HomePath.  The value of these two variables help me correctly create the path to the temporary file.
18 Line 18 starts the ForEach loop that gives the cmdlet the ability to open multiple help files at one.
23 Get the help information and saves it to the temporary txt file.
27 This line will open Notepad.exe with the temporary file.
30 One problem that I noticed in testing is that if I am opening multiple files, the next command to remove the file executes before Notepad reads it.  To solve this problem, I pause the script for .25 seconds before allowing Remove-Item to clean up the txt file.
33 Removes the txt file.
36 Just in case the user asks for a help file that does not exists, this will prevent a blank Notepad window from opening and displays a warning message.

 

At the very least, I recommend that the script writer upgrades to at least PowerShell V3.  The ISE makes it work it and has features that are not available in the V2 ISE.  Remember that PowerShell V2 code is 100% compatible with V3 and V4 so if you are in an environment that has to wait to implement the newer versions of PowerShell, your tool making efforts will not be in vein.  Go ahead and script away.  They will work when you finally get to upgrade.

No comments: