Note that there are some explanatory texts on larger screens.

plurals
  1. PODetermining if a process is running
    primarykey
    data
    text
    <p>all,</p> <p>I am new to Power Shell scripting and my second script is not working 100%. I am not sure what is going on.</p> <p>Purpose:</p> <ol> <li>Check to see if a specific process is running or not.</li> <li>If it is running, send an email advising.</li> <li>If it is not running, attempt to start the process.</li> <li>If attempting to start the process, recheck to see if process started or not.</li> </ol> <p>Issue:</p> <ul> <li>If I change the directory location of the script (to make sure it is wrong), I get the right email.</li> <li>If the process is running, I get the right email.</li> <li>If the process is not running, the script starts the process correctly, but sends and email saying the process is not running when in fact it is running.</li> </ul> <p>Script:</p> <pre><code># Date and Date/Time stamping for files and logs. $FileDateTimeStamp = get-date -uformat "%m%d%Y-%H%M%S" $FileDateStamp = get-date -uformat "%m%d%Y" # Logs directory. $LogsDirectory = "C:\logs\" # AS2 file information. $AS2 = "C:\Program Files\nsoftware\AS2 Connector V2\as2app\bin\nsoftware.AS2Connector.exe" $AS2ParentDirectory = "C:\Program Files\nsoftware\AS2 Connector V2" $ProcessNameToCheck = "nsoftware.AS2Connector" $ProcessIsRunning = Get-Process $ProcessNameToCheck -ErrorAction SilentlyContinue $StartTheProcess = start-process -filepath $AS2 $SleepTime = 2 # Exchange information for sending emails. $EmailServer = "email.me.com" $EmailFrom = "me@me.com" $AuthUser = "username" $AuthPass = "password" $EmailPort = 25 $MaxRetries = 1 # Blat log file location/name. $BlatLogFile = $LogsDirectory + "BlatLog-" + $FileDateStamp + ".log" # Blat information. #$EmailTo = "smaguire@varietydistributors.com,abarnes@varietydistributors.com,tmalcom@varietydistributors.com" $EmailTo = "smaguire@varietydistributors.com" $EmailToSubjectSuccess = "AS2 Connector is running." $EmailToBodySuccess = "The process check for AS2 Connector on OSPC was successful. AS2 Connector is running." $EmailToSubjectFail = "AS2 Connector is NOT running." $EmailToBodyFail = "The process check for AS2 Connector on OSPC was unsuccessful. Attempted to start the application which was also unsuccessful. AS2 Connector is NOT currently running on OSPC." $EmailToSubjectNotInstalled = "AS2 Connector Installation Not Found." $EmailToBodyNotInstalled = "The process check for AS2 Connector on OSPC failed because AS2 Connector does not seem to be installed." $XHeaderInfo = "Email sent from OSPC" function WriteLogFile { #Code snippet obtained from: http://poshcode.org/2566 [cmdletbinding()] Param( [Parameter(ValueFromPipeline=$true,Mandatory=$true)] [ValidateNotNullOrEmpty()] [string] $Message, [Parameter()] [ValidateSet(“Error”, “Warn”, “Info”)] [string] $Level = “Info”, [Parameter()] [ValidateRange(1,30)] [Int16] $Indent = 0, [Parameter()] [IO.FileInfo] $ScriptLogFile = $LogsDirectory + "ScriptLog-" + $FileDateStamp + ".log", [Parameter()] [Switch] $Clobber, [Parameter()] [String] $EventLogName, [Parameter()] [String] $EventSource = ([IO.FileInfo] $MyInvocation.ScriptName).Name, [Parameter()] [Int32] $EventID = 1 ) Begin {} Process { try { $msg = '{0}{1} : {2} : {3}' -f (" " * $Indent), (Get-Date -Format “yyyy-MM-dd HH:mm:ss”), $Level.ToUpper(), $Message switch ($Level) { 'Error' { Write-Error $Message } 'Warn' { Write-Warning $Message } 'Info' { Write-Host ('{0}{1}' -f (" " * $Indent), $Message) -ForegroundColor White} } if ($Clobber) { $msg | Out-File -FilePath $ScriptLogFile } else { $msg | Out-File -FilePath $ScriptLogFile -Append } if ($EventLogName) { if(-not [Diagnostics.EventLog]::SourceExists($EventSource)) { [Diagnostics.EventLog]::CreateEventSource($EventSource, $EventLogName) } $log = New-Object System.Diagnostics.EventLog $log.set_log($EventLogName) $log.set_source($EventSource) switch ($Level) { “Error” { $log.WriteEntry($Message, 'Error', $EventID) } “Warn” { $log.WriteEntry($Message, 'Warning', $EventID) } “Info” { $log.WriteEntry($Message, 'Information', $EventID) } } } } catch { throw “Failed to create log entry in: ‘$ScriptLogFile’. The error was: ‘$_’.” } } End {} } if (test-path $AS2ParentDirectory) { # AS2 is installed on this machine. # Check for the running process. if (!($ProcessIsRunning)) { # Process is not found = not runing. # Try to start the process. # Once start attempt is complete, recheck to make sure failed or succeeded. # Failed: send an alert email through blat. # Succeeded: Send an alert email through blat. write-host "AS2 Connector is not running. Attempting to start." WriteLogFile -message "Script Line #142: AS2 Conenctor is not running. Attempting to start." -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" $StartTheProcess # Give the process a little time to start before checking. Wait X seconds. write-host "Going to sleep for $SleepTime seconds." WriteLogFile -message "Script Line #147: Going to sleep for $SleepTime seconds." -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" start-sleep -s $SleepTime # Now, let's go ahead and recheck to see if the process started or not. if (!($ProcessIsRunning)) { # Process did not start successfully. write-host "AS2 Connector did not start successfully. Sending an email to advise." WriteLogFile -message "Script Line #162: AS2 Conenctor did not start successfully. Sending an email to advise." -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Sending an email to: $EmailTo" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Subject: $EmailToSubjectFail" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Body: $EmailToBodyFail" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" C:\blat\blat.exe -to $EmailTo -s $EmailToSubjectFail -i $EmailFrom -body $EmailToBodyFail -server $EmailServer -f $EmailFrom -u $AuthUser -pw $AuthPass -port $EmailPort -try $MaxRetries -debug -log $BlatLogFile -timestamp -x $XHeaderInfo } else { # Process started successfully. write-host "AS2 Connector started successfully. Sending an email to advise." WriteLogFile -message "Script Line #154: AS2 Conenctor started successfully. Sending an email to advise." -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Sending an email to: $EmailTo" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Subject: $EmailToSubjectSuccess" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Body: $EmailToBodySuccess" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" C:\blat\blat.exe -to $EmailTo -s $EmailToSubjectSuccess -i $EmailFrom -body $EmailToBodySuccess -server $EmailServer -f $EmailFrom -u $AuthUser -pw $AuthPass -port $EmailPort -try $MaxRetries -debug -log $BlatLogFile -timestamp -x $XHeaderInfo } } else { # Process is found = running. # Send an email advising of running status. write-host "Verified AS2 Connector is running. Sending an email to advise." WriteLogFile -message "Script Line #130: Verified AS2 Conenctor is running. Sending an email to advise." -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Sending an email to: $EmailTo" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Subject: $EmailToSubjectSuccess" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Body: $EmailToBodySuccess" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" C:\blat\blat.exe -to $EmailTo -s $EmailToSubjectSuccess -i $EmailFrom -body $EmailToBodySuccess -server $EmailServer -f $EmailFrom -u $AuthUser -pw $AuthPass -port $EmailPort -try $MaxRetries -debug -log $BlatLogFile -timestamp -x $XHeaderInfo } } else { # AS2 is not installed on this machine. # Send an email advising that there is a potential problem. write-host "AS2 Connector does not seem to be installed or is corrupt. Sending an email to advise." WriteLogFile -message "Script Line #173: AS2 Conenctor does not seem to be installed or is corrupt. Sending an email to advise." -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Sending an email to: $EmailTo" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Subject: $EmailToSubjectNotInstalled" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Body: $EmailToBodyNotInstalled" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" C:\blat\blat.exe -to $EmailTo -s $EmailToSubjectNotInstalled -i $EmailFrom -body $EmailToBodyNotInstalled -server $EmailServer -f $EmailFrom -u $AuthUser -pw $AuthPass -port $EmailPort -try $MaxRetries -debug -log $BlatLogFile -timestamp -x $XHeaderInfo } </code></pre> <p>The portion of code that is going wrong is:</p> <pre><code> # Now, let's go ahead and recheck to see if the process started or not. if (!($ProcessIsRunning)) { # Process did not start successfully. write-host "AS2 Connector did not start successfully. Sending an email to advise." WriteLogFile -message "Script Line #162: AS2 Conenctor did not start successfully. Sending an email to advise." -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Sending an email to: $EmailTo" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Subject: $EmailToSubjectFail" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Body: $EmailToBodyFail" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" C:\blat\blat.exe -to $EmailTo -s $EmailToSubjectFail -i $EmailFrom -body $EmailToBodyFail -server $EmailServer -f $EmailFrom -u $AuthUser -pw $AuthPass -port $EmailPort -try $MaxRetries -debug -log $BlatLogFile -timestamp -x $XHeaderInfo } else { # Process started successfully. write-host "AS2 Connector started successfully. Sending an email to advise." WriteLogFile -message "Script Line #154: AS2 Conenctor started successfully. Sending an email to advise." -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Sending an email to: $EmailTo" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Subject: $EmailToSubjectSuccess" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" WriteLogFile -message "Email Body: $EmailToBodySuccess" -level Info -EventID 3 -Indent 2 -EventLogName 'Application' -EventSource "AS2Check.ps1" C:\blat\blat.exe -to $EmailTo -s $EmailToSubjectSuccess -i $EmailFrom -body $EmailToBodySuccess -server $EmailServer -f $EmailFrom -u $AuthUser -pw $AuthPass -port $EmailPort -try $MaxRetries -debug -log $BlatLogFile -timestamp -x $XHeaderInfo } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload