1

Тема: VBS:Запуск powershell через VBS

Добрый день. Подскажите пожалуйста, как через VBS создать  одно правило в планировщике Windows. Решение нашел только через powershell.


  Set objShell = CreateObject("Wscript.Shell")
 objShell.Run("powershell.exe -noexit c:\scripts\test.ps1")

где в test.ps1 храниться команда вида


Register-ScheduledTask -Xml (Get-Content “\\shag\Prepod\admin\Shutdown.xml” | out-string) -TaskName "Shutdown"

которая берет файл xml c сервера

в хмл хранится следующее


<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2019-08-30T19:09:01.349989</Date>
    <Author>DESKTOP-CNG9JB6\Admin</Author>
    <URI>\Shutdown</URI>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <StartBoundary>2019-08-30T22:00:56</StartBoundary>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-21-726067099-22128421-2506831320-1003</UserId>
      <LogonType>InteractiveToken</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>false</AllowHardTerminate>
    <StartWhenAvailable>false</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>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
    <RestartOnFailure>
      <Interval>PT1M</Interval>
      <Count>3</Count>
    </RestartOnFailure>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\Windows\System32\shutdown.exe</Command>
      <Arguments>-s -f</Arguments>
    </Exec>
  </Actions>
</Task>

короче все для создания задания в планировщике..

Так вот вопрос.. можно ли как то это обьеденить все в один VBS файл.. чтобы просто его запустить на компьютере и он добавил задание в планировщик.

2

Re: VBS:Запуск powershell через VBS

Попробуйте запуском SCHTASKS из VBS.

Щт Уккщк Куыгьу Туче
’ҐЄгй п Є®¤®ў п бва Ёж : 1251

3

Re: VBS:Запуск powershell через VBS

Один из вариантов решения - WSF (Windows Script File) скрипт:

create_shutdown_task.wsf

(!) Перед запуском, в коде XML нужно заменить UserId на реальный для Вашего ПК.


<?xml version="1.0" encoding="UTF-8"?>
<job>
	<reference object="Schedule.Service"/>
	<resource id="XmlText"><![CDATA[<?xml version="1.0" encoding="UTF-16"?>
	<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
	  <RegistrationInfo>
		<Date>2019-09-03T16:00:39.4227198</Date>
		<Author>PC\user</Author>
		<URI>\shutdown</URI>
	  </RegistrationInfo>
	  <Triggers>
		<TimeTrigger>
		  <StartBoundary>2019-09-03T16:00:18</StartBoundary>
		  <Enabled>true</Enabled>
		</TimeTrigger>
	  </Triggers>
	  <Principals>
		<Principal id="Author">
		  <UserId>S-1-5-21-3395023712-732476668-2052132001-1428</UserId>
		  <LogonType>InteractiveToken</LogonType>
		  <RunLevel>LeastPrivilege</RunLevel>
		</Principal>
	  </Principals>
	  <Settings>
		<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
		<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
		<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
		<AllowHardTerminate>true</AllowHardTerminate>
		<StartWhenAvailable>false</StartWhenAvailable>
		<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
		<IdleSettings>
		  <Duration>PT10M</Duration>
		  <WaitTimeout>PT1H</WaitTimeout>
		  <StopOnIdleEnd>true</StopOnIdleEnd>
		  <RestartOnIdle>false</RestartOnIdle>
		</IdleSettings>
		<AllowStartOnDemand>true</AllowStartOnDemand>
		<Enabled>true</Enabled>
		<Hidden>false</Hidden>
		<RunOnlyIfIdle>false</RunOnlyIfIdle>
		<WakeToRun>false</WakeToRun>
		<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
		<Priority>7</Priority>
	  </Settings>
	  <Actions Context="Author">
		<Exec>
		  <Command>shutdown</Command>
		  <Arguments>-s -f</Arguments>
		</Exec>
	  </Actions>
	</Task>]]>
	</resource>
	<script language="VBScript">
	<![CDATA[
	With CreateObject("Schedule.Service")
		.Connect
		.GetFolder("").RegisterTask "Shutdown task", getResource("XmlText"), TASK_CREATE_OR_UPDATE, vbNullString, vbNullString, TASK_LOGON_INTERACTIVE_TOKEN
	End With
	]]>
	</script>
</job>
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !