Usando o Windows Server 2008, como faço para capturar a saída de um script que está sendo executado com o agendador de tarefas do Windows?
Estou testando um script de lote de impressão personalizado bastante longo e, para fins de depuração, gostaria de ver toda a saída dele todas as noites.
batch-file
scheduled-tasks
Mechaflash
fonte
fonte
Respostas:
Tente isso como a string de comando no Agendador de tarefas:
fonte
cmd /c "path with spaces/command.cmd > file.txt"
se você tiver espaços. A resposta2>&1
de Ivan também está entre aspas.cmd /c ""C:\temp\My test dir\something 123\myTool.exe" > Tilo_log.txt 2>&1"
Com stderr (para onde vão a maioria dos erros):
fonte
Para complementar a resposta de @ user2744787, aqui está uma captura de tela para mostrar como usar
cmd
com argumentos em uma tarefa agendada:Programa / script:
cmd
Adicione argumentos:
/c run_with_default_port.bat > IMQuantWebServices.log
fonte
O
>>
irá anexar o arquivo de log, em vez de substituí-lo todas as vezes. O2>&1
também enviará erros para seu arquivo de log.fonte
Você pode ter um debug.cmd que chama yourscript.cmd
você agenda debug.cmd em vez de yourscript.cmd
fonte
Use o
cmd.exe
processador de comando para construir um nome de arquivo com carimbo de data / hora para registrar a saída de sua tarefa agendadaPara construir sobre as respostas de outras pessoas aqui, pode ser que você queira criar um arquivo de saída que tenha a data e / ou hora embutida no nome do arquivo. Você pode usar o
cmd.exe
processador de comandos para fazer isso por você.Nota: Essa técnica pega a saída da string de variáveis de ambiente internas do Windows e as divide com base na posição do caractere. Por causa disso, os valores exatos fornecidos nos exemplos abaixo podem não ser corretos para a região do Windows que você usa. Além disso, com algumas configurações regionais, alguns componentes da data ou hora podem introduzir um espaço no nome do arquivo construído quando seu valor for menor que 10. Para atenuar esse problema, coloque o nome do arquivo entre aspas para que quaisquer espaços indesejados no arquivo name não quebrará a linha de comando que você está construindo. Experimente e descubra o que funciona melhor para sua situação.
Esteja ciente de que
PowerShell
é mais poderoso do quecmd.exe
. Uma maneira de ser mais poderoso é que pode lidar com diferentes regiões do Windows. Mas esta resposta é sobre como resolver esse problema usandocmd.exe
, nãoPowerShell
, então continuamos.Usando
cmd.exe
Você pode acessar diferentes componentes de data e hora dividindo as variáveis de ambiente internas
%date%
e%time%
, como segue (novamente, os valores exatos de divisão dependem da região configurada no Windows):%date:~10,4%
%date:~4,2%
%date:~7,2%
%time:~0,2%
%time:~3,2%
%time:~6,2%
Suponha que você queira que seu arquivo de log seja nomeado usando este formato de data / hora: "
Log_[yyyyMMdd]_[hhmmss].txt
". Você usaria o seguinte:Para testar isso, execute a seguinte linha de comando:
Juntando tudo, para redirecionar ambos
stdout
estderr
de seu script para um arquivo de log nomeado com a data e hora atuais, use o seguinte como sua linha de comando:Observe o uso de aspas ao redor do nome do arquivo para lidar com instâncias em que um componente de data ou hora pode introduzir um caractere de espaço.
No meu caso, se a data / hora atual fosse 05/10/2017 9:05:34, a linha de comando acima produziria o seguinte:
fonte
Você pode gravar em um arquivo de log nas linhas que deseja gerar assim:
Dessa forma, você pode escolher quais comandos enviar se não quiser vasculhar tudo, apenas obtenha o que precisa ver. O
>
enviará para o arquivo especificado (criando o arquivo se ele não existir e substituindo-o se existir). O>>
será anexado ao arquivo especificado (criando o arquivo se ele não existir, mas anexando ao conteúdo se existir).fonte
Exemplo de como executar o programa e gravar stdout e stderr em arquivo com carimbo de data / hora:
Parte fundamental é colocar aspas duplas na parte posterior
cmd /c
e dentro dela usar aspas duplas como de costume. Observe também que a data depende da localidade; este exemplo funciona usando a localidade dos EUA.fonte
Este trecho usa wmic.exe para construir a string de data. Não é mutilado pelas configurações de localidade
fonte