2015-02-13 3 views
1

У меня есть сценарий Powershell для добавления новой задачи расписания. Он используется для запуска файла PS1, который включает в себя некоторые SQL-запросы как на локальном ящике SQL, так и на удаленных SQL-блоках.Не удалось установить «Запустить, был ли пользователь включен или нет»

Если этот сценарий создает расписание, я должен сделать одно изменение вручную для его работы: мне нужно установить параметр «Запустить, был ли пользователь включен или нет».

Вот функция:

function createschedule { 
    $startdatetime = (get-date).AddMinutes(1).ToString("HH:mm") 
    $taskName = "My Bestest Schedule" 
    $action = New-ScheduledTaskAction -Execute 'Powershell.exe' -Argument '-file "C:\mypath\bin\mypowershellscript.ps1"' 
    $trigger = New-ScheduledTaskTrigger -Once -At $startdatetime 
    $settings = New-ScheduledTaskSettingsSet -StartWhenAvailable 
    echo "" 
    echo "Adding Basic parameterized task..." 
    Register-ScheduledTask -TaskName $taskName -Trigger $trigger -Action $action -Setting $settings -User "Administrator" -description "Sitewatch v2 Collector" -RunLevel 1 | Out-null 
    $trigger.RepetitionInterval = (New-TimeSpan -Minutes 1) 
    $trigger.RepetitionDuration = (New-TimeSpan -Days 1000) 
    echo "Adding trigger to the new task..." 
    Set-ScheduledTask $taskName -Trigger $trigger | Out-Null 
    echo "" 
} 

Когда сценарий создает запись, пробеги команды и всплывает окно в течение нескольких секунд. Он по-прежнему работает, но только при входе в систему. Если я вручную переключу этот параметр, он отлично работает.

Вещи, которые я пробовал/считать:

  • изменил пользователю NETWORKSERVICE или SYSTEM, но те, кто не может пройти проверку подлинности с SQL при выполнении опрашивающего
  • Там есть переключатель я нашел -logontype ServiceAccount но Безразлично» т, кажется, работают
  • Я попытался с помощью «Principal» часть: #$principal = New-ScheduledTaskPrincipal -GroupID "BUILTIN\Administrators" но дает ошибки слишком
  • Наконец, я не могу просто поставить пароль, так как это будет работать на разных коробках, которые имеют разные пароли Fo г Администратор (или любой другой администратор использование я установил)

Глядя на этот пост, я не мог определить, что мне нужно: How to set schedule.service "Run whether user is logged on or not" in Powershell?

Кроме того, Microsoft, кажется, говорят, что просто иметь Principal, это позволяет задача для запуска того, зарегистрирован пользователь или нет, но это не работает для меня:

Подробное описание командлет New-ScheduledTaskPrincipal создает объект, содержащий запланированную основную задачу. Используйте запланированную задачу , чтобы выполнить задачу в контексте безопасности указанной учетной записи . Когда вы используете запланированную задачу, планировщик заданий может выполнить задачу, независимо от того, зарегистрирована ли эта учетная запись.

Найдено здесь: https://technet.microsoft.com/en-us/library/jj649825.aspx

Thx.

ответ

3

Я сделал несколько поисков и получил несколько хороших примеров для использования.

function createschedule { 
    $startdatetime = (get-date).AddMinutes(1).ToString("HH:mm") 
    $jobname = "My bestest Schedule" 
    $repeat = (New-TimeSpan -Minutes 1) 
    $action = New-ScheduledTaskAction –Execute "$pshome\powershell.exe" -Argument '-file "C:\mypath\bin\mypowershellscript.ps1"' 
    $duration = ([timeSpan]::maxvalue) 
    $trigger = New-ScheduledTaskTrigger -Once -At $startdatetime -RepetitionInterval $repeat -RepetitionDuration $duration 
    $msg = "Enter the username and password that will run the task"; 
    $credential = $Host.UI.PromptForCredential("Task username and password",$msg,"$env:userdomain\$env:username",$env:userdomain) 
    $username = $credential.UserName 
    $password = $credential.GetNetworkCredential().Password 
    $settings = New-ScheduledTaskSettingsSet -StartWhenAvailable -RunOnlyIfNetworkAvailable -DontStopOnIdleEnd 
    Register-ScheduledTask -TaskName $jobname -Action $action -Trigger $trigger -RunLevel Highest -User $username -Password $password -Settings $settings | out-null 
    echo "" 
} 

Я считаю, что моя проблема в том, что «Run ли пользователь регистрируется или нет» не может быть установлен, если реальный пользователь не используется в комплекте с паролем. С моим кодом выше я запрашиваю учетные данные (что идеально подходит для моего варианта использования), и это было использовано для регистрации. Параметр «Запустить, был ли пользователь включен или нет» теперь настроен правильно.

0

Вы можете использовать SCHTASKS.exe непосредственно с помощью следующей команды.

$newtask = {SCHTASKS /create /v1 /s $ComputerName /ru "Administrator" /rp "MyPlanTextPass" /sc once /tn "My BesTest Schedule" /st "23:00:00" /tr "C:\Temp\Test.bat"} 

Invoke-Command $newtask 

У меня нет других командлетов планирования задач, чтобы попробовать что-нибудь еще так, я полагал, что я бросил бы это как вариант.