none
настройка шедулера RRS feed

  • Вопрос

  • Здравствуйте, на хостах установлен hyper-v 2019. хосты раз в минуту считывают файл в расшаренной папке в сети и если в этом файле 1 - то сохраняют виртуальные машины и выполняют завершение работы.

    вот собственно скрипт

    $LOG="D:\ps\log_ups.txt"


    write "__________________________________________________________________________" | out-file $LOG -append
    $i=0
    while ($i -lt 2868){
    $i=$i+1
    $a=get-content \\RUS\registr\registr.txt
    $stroka=[int]::Parse($a)
    #write-host "$i"
    if ($stroka -eq 1){
                        write "$stroka регистр"| out-file $LOG -append
                        write "$(get-date -format "dd.MM.yy.HH.mm.ss") UPS работает от батарей" | out-file $LOG -append
                        write "$(get-date -format "dd.MM.yy.HH.mm.ss") Сохраняем виртуальные машины" | out-file $LOG -append
                        Get-Vm | where state -eq Running |Stop-vm -Save

                        shutdown /r /t 10
    }
    else {write "$(get-date -format "dd.MM.yy.HH.mm.ss") ---- i= $i" | out-file $LOG -append}
    start-sleep -s 30
           }

    вот xml задачи планировщика

    <?xml version="1.0" encoding="UTF-16"?>
    <Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
      <RegistrationInfo>
        <Date>2020-05-15T13:51:41.4318259</Date>
        <Author>CONTROL\control</Author>
        <URI>\ups</URI>
      </RegistrationInfo>
      <Triggers>
        <CalendarTrigger>
          <StartBoundary>2020-05-15T14:30:03</StartBoundary>
          <Enabled>true</Enabled>
          <ScheduleByDay>
            <DaysInterval>1</DaysInterval>
          </ScheduleByDay>
        </CalendarTrigger>
      </Triggers>
      <Principals>
        <Principal id="Author">
          <UserId>S-1-5-21-1510405971-565827739-3153289692-1103</UserId>
          <LogonType>Password</LogonType>
          <RunLevel>HighestAvailable</RunLevel>
        </Principal>
      </Principals>
      <Settings>
        <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
        <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
        <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
        <AllowHardTerminate>true</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>false</WakeToRun>
        <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
        <Priority>7</Priority>
      </Settings>
      <Actions Context="Author">
        <Exec>
          <Command>%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe</Command>
          <Arguments>D:\ps\ups.ps1</Arguments>
        </Exec>
      </Actions>
    </Task>

    скрипт не выполняется если не произведен вход 

    Пожалуйста, помогите сделать так чтобы он выполнялся даже если не произведен вход на сервер

    9 февраля 2021 г. 13:28

Все ответы

  • покажите скрин настроек, xml как-то не очень усвояется, а компа нет чтоб проверить

    The opinion expressed by me is not an official position of Microsoft

    9 февраля 2021 г. 14:39
    Модератор
  • настроить для, яб поменял на максимально совместимые ос (2019 например), а так тут проблем не вижу

    а как выглядят тригеры?


    The opinion expressed by me is not an official position of Microsoft

    10 февраля 2021 г. 5:42
    Модератор
  • я беру эту задачу с первого сервера и экспортирую в файл, причем на первом сервере все норм отрабатывает. на втором с помощью команды импротирую

    Register-ScheduledTask -xml (Get-Content 'C:\ps\ups.xml' | Out-String) -TaskName "ups" -User Control\Control –Force

    на втором работает только если произведен вход в учтную запись.

    на первом установлен server 2016 datacenter

    на втором hyper-v 2019

    и еще с помощью консоли планировщика подключаюсь ко второму сервера но заданий не отображается а через posh get-scheduledtsk все задания отображаются

    10 февраля 2021 г. 7:38
  • Вообщем порядок таков

    1) импорт:

    Register-ScheduledTask -xml (Get-Content 'C:\ps\ups.xml' | Out-String) -TaskName "ups" -User Control\Control –Force

    2) добавление пользователя и пароля

    $taskPrincipal = New-ScheduledTaskPrincipal -UserId 'Control\control' -RunLevel Highest
    Set-ScheduledTask -TaskName 'ups' -User $taskPrincipal.UserID -Password 'Карантин=бизнеситолько'

    но как добиться чтобы из консоли планировщика просматривать задание с серверов на которых установлен бесплатный hyper-v так и не понял...

    • Изменено shmelfrol 10 февраля 2021 г. 11:28
    10 февраля 2021 г. 11:27
  • я беру эту задачу с первого сервера и экспортирую в файл, причем на первом сервере все норм отрабатывает. на втором с помощью команды импротирую

    Register-ScheduledTask -xml (Get-Content 'C:\ps\ups.xml' | Out-String) -TaskName "ups" -User Control\Control –Force

    на втором работает только если произведен вход в учтную запись.

    на первом установлен server 2016 datacenter

    на втором hyper-v 2019

    и еще с помощью консоли планировщика подключаюсь ко второму сервера но заданий не отображается а через posh get-scheduledtsk все задания отображаются

    вы пароль вводили на втором сервере?

    The opinion expressed by me is not an official position of Microsoft

    10 февраля 2021 г. 12:47
    Модератор
  • сначала не вводил, поэтому и не работало

    Вообщем порядок таков

    1) импорт:

    Register-ScheduledTask -xml (Get-Content 'C:\ps\ups.xml' | Out-String) -TaskName "ups" -User Control\Control –Force

    2) добавление пользователя и пароля

    $taskPrincipal = New-ScheduledTaskPrincipal -UserId 'Control\control' -RunLevel Highest
    Set-ScheduledTask -TaskName 'ups' -User $taskPrincipal.UserID -Password 'Карантин=бизнеситолько'

    но как добиться чтобы из консоли планировщика просматривать задание с серверов на которых установлен бесплатный hyper-v так и не понял...

     
    10 февраля 2021 г. 13:15
  • Подскажите. пожалуйста почему не срабатывает shutdown /a  в скрипте,  а если и срабатывает то дальше скрипт не продолжается

    $hostname=hostname
    $LOG="\\GSE264-04_HOST\ups\log_ups_$hostname.txt"
    $servers = @('gse264-bl1','rus','ase301-102','rfx')

    foreach($server in $servers){
    if ($hostname -eq $server)
    {$sek=500
    Write-Host $sek}
    else {$sek=Get-Random -Maximum 300 -Minimum 100}
    }


    write "!!!__________________________________________________________________________!!!" | out-file $LOG -append
    $i=1
    $b=0
    while ($i -gt 0){
    $i=$i+1
    $a=get-content \\GSE264-04_HOST\ups\registr1.txt
    $stroka=[int]::Parse($a)
    #write-host "$i"
    if ($stroka -eq 1){
                        
        write "$sek секунд задержка"| out-file $LOG -append
                        write "$stroka регистр"| out-file $LOG -append
                        write "$(get-date -format "dd.MM.yy.HH.mm.ss") UPS работает от батарей" | out-file $LOG -append
                        write "$(get-date -format "dd.MM.yy.HH.mm.ss") Сохраняем виртуальные машины" | out-file $LOG -append
                        Get-Vm | where state -eq Running |Stop-vm -Save
                        $b=1;
                        shutdown /r /t $sek
    $sek=$sek-30
    start-sleep -s $sek
    }
    else {
    write "$(get-date -format "dd.MM.yy.HH.mm.ss") ---- i= $i" | out-file $LOG -append

    if($b -eq 1){
    write "$stroka регистр, отмена завершения работы"| out-file $LOG -append
    shutdown /a
    }
    }

    start-sleep -s 30
           }

    17 февраля 2021 г. 11:07