My question is why should i provide a start in path when clearly it says "Optional" in the task's properties?
Digamos, por exemplo, que eu esteja criando uma tarefa agendada que execute um script do Powershell:
Porqueissoestáerrado?Bem,primeiro,nãotemoscertezaseopowershell.exeseráresolvidocorretamenteporquenãosabemosseousuárioqueexecutaatarefaagendadatemsuasvariáveisdeambientePATHconfiguradascorretamente.Dependendodequemvocêdefiniuparaexecutaratarefa,sejaSistemaouumusuáriodedomínio,suasvariáveisPATHserãodiferentes.Àsvezes,funciona,epowershell.exeéiniciadocorretamente,masporquenãoiremfrenteetomarotrabalhodeadivinhaçãoforadeleeespecificarumnomedecaminhototalmentequalificadooexecutávelpowershell.exe.
Emsegundolugar,oscript.ps1éonde?Vocênãoespecificou.OPowershellserálançadoeseudiretóriodeinicializaçãoserá%WINDIR%\System32
.Amenosquesejaondevocêarmazenouseuscript(eesperoquenãoseja),oPowershellnãoserácapazdeencontrá-lo.
Isso é melhor agora que fornecemos caminhos completos para o executável e para o script. Mas ainda não chegamos ao que é "Start in (optional)". Bem, espere, estamos chegando lá.
O conteúdo de script.ps1
é assim:
"Hello world!" | Out-File test.txt
Então, se eu fosse executar a tarefa agendada acima agora, que inicia o Powershell, que executa script.ps1, onde você acha que o test.txt será escrito?
Se você adivinhou %WINDIR%\System32
, você receberá um cookie!
Se eu quisesse que o test.txt fosse para C:\Scripts
, eu digitaria C:\Scripts
no campo "Iniciar em (opcional)"!
É por isso que é opcional.
Também devo salientar que você também pode contornar isso usando nomes de caminho completos em seu script para fazer as coisas irem onde quiser, sem ter que se preocupar com variáveis PATH e diretórios de trabalho.
Agora, para a segunda pergunta.
O schtasks.exe não parece ter a capacidade de adicionar o "Start in" ou "Working Directory" de uma tarefa agendada. Que pena.
Uma coisa que você pode fazer é usar as tarefas XML for Task Scheduler 2.0, que permitem definir o diretório de trabalho. Aqui está o XML da tarefa de teste que criei para essa pergunta:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2013-07-19T09:41:27.0446696</Date>
<Author>DOMAIN\user</Author>
</RegistrationInfo>
<Triggers />
<Principals>
<Principal id="Author">
<UserId>DOMAIN\user</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>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe</Command>
<Arguments>C:\Scripts\script.ps1</Arguments>
<WorkingDirectory>C:\Scripts</WorkingDirectory>
</Exec>
</Actions>
</Task>
Você pode usar schtasks /XML
para importar tarefas por meio de scripts de arquivos XML.