Scripting. Powershell, VMware, Windows, Active Directory & Exchange. All that kind of stuff…..
RSS icon Email icon Home icon
  • PowerShell 2.0: One Cmdlet at a Time #71 New-Module

    Posted on March 4th, 2010 Jonathan Medd No comments

    Continuing the series looking at new cmdlets available in PowerShell 2.0. This time we look at the New-Module cmdlet.

    What can I do with it?

    PowerShell 2.0 introduces the concept of modules; essentially they are the evolution of snapins from PowerShell 1.0. New-Module enables you to create a dynamic module from a script block that is available in the current session.

    Note: New-Module does not create a module on disk available for use at a later date! However, Jeffrey Snover has created a module which will create a template for a new module on disk for you.

    Examples:

    Create a new dynamic module with the Function Write-Logfile as the scriptblock to create the module. Test to see whether the function is available from Get-Module or Get-Command.

    New-Module -ScriptBlock
    {Function Write-Logfile ($log) {$Logfile = "C:\Log.txt"; $log
    | Out-File -FilePath $Logfile -Append}}
    Get-Module
    Get-Command Write-Logfile

    You will see that Get-Module is not aware of the new module, but Get-Command is aware of the Write-Logfile function.

    New-Module1

    Create a new dynamic module with the Function Write-Logfile as the scriptblock to create the module. Give it a name and use Import-Module to make it available to Get-Module.   Test to see whether the function is available from Get-Module or Get-Command.

    New-Module -ScriptBlock
    {Function Write-Logfile ($log) {$Logfile = "C:\Log.txt"; $log
    | Out-File -FilePath $Logfile -Append}} -Name LogfileModule
    | Import-Module
    Get-Module
    Get-Command Write-Logfile

    You will see that this time both Get-Module and Get-Command are aware of the LogfileModule and Write-Logfile function.

    New-Module2

    How could I have done this in PowerShell 1.0?

    You could have created a custom snapin and imported with the Add-PSSnapin cmdlet.

    1000 things 1% better!

    Leave a reply