Powershellでクロージャー使用例

非常に長いパラメータセットになりがちなので、データとコードをオブジェクトにラップする  メッセージ作成スクリプトの再利用単純化

function Get-MessageObject
{
   param
   (
      [String]$MsgType,
      [String]$Message,
      [String]$CurrentDay,
      [String]$CurrentTime,
      [String]$DayOfWeek
   )
   $Properties = @{
                    'MessageType' = $MsgType
                    'Message'    = $Message
                    'CurrentDay'    = $CurrentDay
                    'CurrentTime'    = $CurrentTime
                    'DayOfWeek'  = $DayOfWeek
                  }
   New-Object -TypeName psobject -Property $Properties
}

function New-MessageGenerator
{
   param
   (
      [String]$MsgType
   )
   $Day = (Get-Date).ToLongDateString()   
   $Time = (Get-Date).ToLongTimeString()
   $DayOfWeek = (Get-Date).DayOfWeek
   {
      param
      (
         [String]$Message
      )
      Get-MessageObject -MsgType $MsgType -Message $Message -CurrentDay $Day -CurrentTime $Time -DayOfWeek $DayOfWeek
   }.GetNewClosure()
}

$function:global:getInfoMsg = New-MessageGenerator -MsgType 'Information'
$function:global:getWarnMsg = New-MessageGenerator -MsgType 'Warning'
$function:global:getErrorMsg = New-MessageGenerator -MsgType 'Error'
$function:global:getExceptionMsg = New-MessageGenerator -MsgType 'Exception'

getInfoMsg -Message 'This is a Information.'
getWarnMsg -Message 'This is a Warning.'
getErrorMsg -Message 'This is a Error.'
getExceptionMsg -Message 'This is a Exception.'