Jump to content
ethorup

Script to restart Pulseway on demand

Recommended Posts

Small Correction: The scheduled task can be run on demand, but by default it restarts the pulseway service once a day at 11am, which in theory, should force it to check for updates. 

So one of the problems I ran into with pulseway is, sometimes I would want to restart the service.  Doesn't really matter why, could be to get it to check for new updates to the pulseway agent and get them on the latest version.  The problem was that if I just setup a script to restart the service, say like this ReStart-Service "Pulseway" what would happen is that it would send the command in whatever user environment pulseway runs in, it would execute it, the service would stop, and thennnn.......... nothing! Because we stopped the service, it kills whatever user environment pulseway was using including the script and it never finishes the command.  It's really weird.  So I setup this wonderful little script that creates a scheduled task, that can be run on demand using another script.  It keeps you from running a restart service task on all your end points and suddenly losing connection with them all.... not fun.

So here is the first script you put in to pulseway.  Read the comments and change the working directory, user account and password to match what you use.  It also requires a universal user account on all your workstations that you want to use it on.

# this script will create a scheduled task that runs a powershell script that restarts the pulseway service.

# This line deletes the task if it already exists.  That way if you make changes to the task it will create a fresh copy of it.
schtasks /delete /F /tn "Restart Pulseway"

# working directory path
$workd = "c:\temp"

# Check to see if working directory exists and create if it does not.
If (!(Test-Path -Path $workd -PathType Container))

New-Item -Path $workd  -ItemType directory 
}

# Create a variable with the entire contents of the XML file used to create the scheduled task
$text = '<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2017-04-24T12:50:26.5825569</Date>
    <Author>ECHO-FAMILYPC\Echo</Author>
    <Description>this will restart the pulseway service, forcing it to check for and implement any updates.</Description>
    <URI>\Restart Pulseway</URI>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>2017-04-24T11:00:00</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-21-3275926025-1642913270-681481828-1006</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <WakeToRun>true</WakeToRun>
    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>Powershell.exe</Command>
      <Arguments>-ExecutionPolicy Bypass '+$workd+'\rstrtPulse.ps1</Arguments>
    </Exec>
  </Actions>
</Task>
'

# Create a variable containing the entire contents of the powershell script that will restart the pulseway service.
$text2 = 'ReStart-Service "Pulseway"'

# Pump the contents of the two variables into the actuall files to be used
$text | Set-Content $workd\rstrtPulse.xml
$text2 | Set-Content $workd\rstrtPulse.ps1

# Command that actually creates the scheduled task.  You will need to change UserName and Password to the universal admin creds that you may use.
schtasks.exe /create /xml "$workd\rstrtPulse.xml" /tn "Restart Pulseway" /ru UserName /rp Password

#Wait a couple seconds
Start-Sleep -s 2

# Delete the files when done.  Dont need anyone knowing my secrets!
del $workd\rstrtPulse.xml
del $workd\rstrtPulse.ps1

 

Here is the second script that you will use to execute the scheduled task

schtasks /run /tn 'Restart Pulseway'

 

Have fun, stay safe, always test your scripts!

Edited by ethorup
minor correction in description

Share this post


Link to post
Share on other sites

Thanks, I did use on some machines the following command to restart Pulseway from the mobile app and it did restart the service without any problems:

Restart-Service Pulseway

-Paul

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Francis
      Hi,
      I think it misses the ability to monitor bandwidth on servers and users computers. It would be nice to have a history of several weeks and the services used.
    • By Finzsoft
      I am trying to upgrade some software using PowerShell and I am not sure if my parameters are correctly formatted .  See highlighted text
       
      # Silent Install Secure Secure Authentication
      # http://repository.eset.com/v1/com/eset/apps/business/esa/windows/v2/2.7.32.0/esa_nt64_enu.msi
      # Path for the workdir
      $workdir = "c:\scripts\"
      # Check if work directory exists if not create it
      If (Test-Path -Path $workdir -PathType Container)
      { Write-Host "$workdir already exists" -ForegroundColor Red}
      ELSE
      { New-Item -Path $workdir  -ItemType directory }
      # Download the installer
      $source = "http://repository.eset.com/v1/com/eset/apps/business/esa/windows/v2/2.7.32.0/esa_nt64_enu.msi"
      $destination = "$workdir\esa_nt64_enu_v2.msi"
      # Check if Invoke-Webrequest exists otherwise execute WebClient
      if (Get-Command 'Invoke-Webrequest')
      {
           Invoke-WebRequest $source -OutFile $destination
      }
      else
      {
          $WebClient = New-Object System.Net.WebClient
          $webclient.DownloadFile($source, $destination)
      }
      Invoke-WebRequest $source -OutFile $destination
      # Start the installation
      msiexec.exe /i "$workdir\esa_nt64_enu_v2.msi" ADDLOCAL="Credential_Provider" /qb /L*v "c:\esa_install_log.txt"
      # Wait XX Seconds for the installation to finish
      Start-Sleep -s 35
      # Remove the installer
      rm -Force $workdir\esa_nt64*
    • By Basil62
      Hello and good day. Is there any way for Pulseway to notify me when the monitored system reaches a specific % threshold of RAM or CPU usage?
    • By Wannes Vande Wiele
      Hello!

      Recently I've been experimenting a bit using scripts that contain variables that the user should enter.
      For example, a very simple one to shutdown a computer after X-amount of time: (example use-case:  I download large files during the night, so it doesn't count towards my ISP data-usage)

      @echo off
      set /p time=Enter time in seconds:
      shutdown /s /t %time%
      timeout /t 3 /NOBREAK
      exit

      however, upon executing said script, the app doesn't request for the variable to be filled out. (I guess it's not made for such uses)
      Obviously, i can manually enter the command using CMD, but i don't want to be typing the command every time i need it. (you can call me lazy :p)

      Any ideas how to do this correctly?
    • By dpbklyn
      Is there a way to kick off an automated task based on a notification or alert.  For Example, if we get a notification of a disk getting full, I would want the automation to run: 
      <Open a ticket>--> <add predetermined note>--> <add 15 minutes>--><run task to clean drive>--><send notification that task has completed>--><close ticket>
      Is this possible now, or should this be a feature request?
      Thank you,
      dp
×