Uninstalling the PowerShell ISE by Using a Workflow


Summary: Microsoft Scripting Guy, Ed Wilson, talks about removing a Windows feature by using a Windows PowerShell workflow.

Microsoft Scripting Guy, Ed Wilson, is here. This morning I am sipping a cup of Sencha green tea. I happened to have some lying around and I decided I would go ahead and drink it this morning. I added a bit of fresh lemon and half a stick of cinnamon to the cup. It is quite good, if a bit understated. Normally, I would have green tea in the afternoon, but like I said, this morning I happened to have some lying around, so I thought, “Why not?”

There are, in fact, several times when I say, “Why not?” Today is one of those occasions.

Create a module from a Windows PowerShell workflow

Today I want to create a Windows PowerShell workflow that will uninstall the Windows PowerShell ISE. Then I will reboot the computer, and double check that the Windows PowerShell ISE is, in fact, uninstalled. Later, I will change it so that it will also install the Windows PowerShell ISE, so don’t get too concerned.

The cool thing is that there is really no difference between creaing a workflow and storing the workflow in a script (or in a module), except that if it is in a module, I can use Export-ModuleMember to export the functions.

Windows PowerShell considers a workflow to be a function, and I can treat the workflow in the same manner as I treat a function. This means that I will find them hanging out on the Function drive, and I can use Get-Command to find them. The advantage is that if I store my workflow in a module, I can use Import-Module to import the workflow.

Uninstall the ISE

The first thing I want to do is to create a workflow that will uninstall the Windows PowerShell ISE. To do this, I use the Get-WindowsFeature cmdlet and retrieve the PowerShell-ISE feature. I then pipe it to Remove-WindowsFeature.

This really the meat and potatoes of the operation. What makes it a workflow is that I use the Workflow keyword, and I define my tasks inside a Parallel script block. Here is that portion of the script:

Workflow Uninstall-ISE

{

    Parallel {

              Get-WindowsFeature PowerShell-ISE |

              Remove-WindowsFeature }

While I am playing around, I decide to define a sequence that will restart the computer and wait for Windows PowerShell to start up on the remote computer. After that takes place, I use the Get-WindowsFeature cmdlet to ensure the Windows PowerShell ISE is uninstalled. Here is that portion of the workflow:

Sequence {

              Restart-Computer -Wait -for PowerShell

              Get-WindowsFeature PowerShell-ISE

              }

The entire workflow is shown here:

Workflow Uninstall-ISE

{

    Parallel {

              Get-WindowsFeature PowerShell-ISE |

              Remove-WindowsFeature }

    Sequence {

              Restart-Computer -Wait -for PowerShell

              Get-WindowsFeature PowerShell-ISE

              }

 

}

When I write code to do or undo something, at the same time, I like to write code to reverse the process. So here is that script:

Workflow Install-ISE

{

    Parallel {

              Get-WindowsFeature PowerShell-ISE |

              ADD-WindowsFeature }

    Sequence {

              Restart-Computer -Wait -for PowerShell

              Get-WindowsFeature PowerShell-ISE

              }

 

}

Cool. So how hard is it to turn this into a module? Not hard at all, I add the Export-ModuleMember command at the bottom of the script and save it as a .psm1 file. Here is the Export command:

Export-ModuleMember -Function *

And, that is it.

I save it in a shared location because tomorrow I am going to use this module for a remote workflow to uninstall the Windows PowerShell ISE against a list of servers.

That is all there is to using a workflow to uninstall a feature. Workflow Week will continue tomorrow when I will talk about remotely running the workflow.

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 

Comments (2)

  1. This is very helpful. Thsnks

  2. Ray Avila says:

    Is it necessary to use Get-WindowsFeature PowerShell-ISE | Remove-WindowsFeature?

    Why not just use Remove-WindowsFeature -Name PowerShell-ISE, unless you want to use the InstalledState property to check whether it is already installed?

Skip to main content