PoshCode Archive  Artifact [c797219a3c]

Artifact c797219a3c8cebf3855b673c2faa5bf0c727020afc0cfab5765dd429c1da3947:

  • File Function-Run-Script.ps1 — part of check-in [6fc6872f6e] at 2018-06-10 13:20:29 on branch trunk — This function should be included in the PowerShell ISE profile.ps1 and it will display the start and end times of any scripts started clicking ‘Run Script’ (or F2) in the Add-ons Menu; additionally they will be logged to the Scripts Event Log (which needs creating first) and also to a text log file. This defaults to that created by the Windows Script Monitor Service (available from www.SeaStarDevelopment.Bravehost.com) which normally indicates the full command line used to start each script. (user: Archdeacon size: 3533)

# encoding: ascii
# api: powershell
# title: Function Run-Script
# description: This function should be included in the PowerShell ISE profile.ps1 and it will display the start and end times of any scripts started clicking ‘Run Script’ (or F2) in the Add-ons Menu; additionally they will be logged to the Scripts Event Log (which needs creating first) and also to a text log file. This defaults to that created by the Windows Script Monitor Service (available from www.SeaStarDevelopment.Bravehost.com) which normally indicates the full command line used to start each script.
# version: 2.0
# type: function
# author: Archdeacon
# license: CC0
# function: Run-Script
# x-poshcode-id: 3104
# x-archived: 2015-04-24T02:03:19
# x-published: 2012-12-18T03:47:00
#
#
#################################################################################
# This function should be included in the PowerShell ISE profile.ps1 and it will 
# display the start and end times of any scripts started by clicking 'Run Script'
# in the Add-ons Menu, or F2; additionally they will be logged to the Scripts
# Event Log (which needs creating first) and also to a text log file. This 
# defaults to that created by the Windows Script Monitor Service (available from 
# www.SeaStarDevelopment.Bravehost.com) which normally indicates the full command
# line used to start each script. 
# The source directory of any script must always be the current '$pwd'.
# V2.0 Use Try/Catch to trap (child) script errors & change Hotkey to F2.
# v3.1 Arguments entered on the command line will now be passed to the script.
#################################################################################

function Run-Script {
   $script = $psISE.CurrentFile.DisplayName
   if ($script.StartsWith("Untitled") -or $script.Contains("profile.") -or `
      ($host.Name -ne 'Windows PowerShell ISE Host' )) {
      return
   }
   $psISE.CurrentFile.Save()
   $logfile = "$env:programfiles\Sea Star Development\" + 
        "Script Monitor Service\ScriptMon.txt"                   #Change to suit.        
   if (!(Test-Path env:\JobCount)) {
      $env:JobCount = 1                #This will work across multi Tab sessions.
   }
   $number = $env:JobCount.PadLeft(4,'0')
   $startTime = Get-Date -Format "dd/MM/yyyy HH:mm:ss"
   #Now grab any parameters entered from the command line...
   $parms = $psISE.CurrentPowerShellTab.CommandPane.Text
   $tag  = "$startTime [$script] start. --> PSE $($myInvocation.Line) $pwd\$script $parms"
   if (Test-Path $logfile) {
       $tag | Out-File $logfile -encoding 'Default' -Append
   }
   "$startTime [$script] started." 
   Write-EventLog -Logname Scripts -Source Monitor -EntryType Information -EventID 2 -Category 002 -Message "Script Job: $script (PSE$number) started."
   try {
      Invoke-Expression "$pwd\$script $parms"
   }
   catch {
      Write-Host -ForegroundColor Red ">>> ERROR: $_"
   }
   $endTime = Get-Date -Format "dd/MM/yyyy HH:mm:ss"
   $tag  = "$endTime [$script] ended. --> PSE $($myInvocation.Line) $pwd\$script $parms"
   if (Test-Path $logfile) {
      $tag | Out-File $logfile -encoding 'Default' -Append
   }
   "$endTime [$script] ended."
   Write-Eventlog -Logname Scripts -Source Monitor -EntryType Information -EventID 1 -Category 001 -Message "Script Job: $script (PSE$number) ended."
   $env:JobCount = [int]$env:JobCount+1
}

$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Run Script",{Run-Script}, "F2") | Out-Null