O get-content -wait
do Powershell seguirá um arquivo como tail -f
Estou criando automaticamente tarefas agendadas com essa linha em um script do Windows em lotes:
schtasks /Create /RU SYSTEM /RP SYSTEM /TN startup-task-%%i /TR %SPEEDWAY_DIR%\%TARGET_DIR%%%i\%STARTUPFILE% /SC HOURLY /MO 1 /ST 17:%%i1:00
Eu queria evitar usar credenciais de usuário específicas e, assim, decidi usar o SYSTEM.
Agora, ao verificar a lista de processos dos gerenciadores de tarefa ou, melhor ainda, diretamente com o
C:\> schtasks
comando em si, tudo está funcionando bem, as tarefas estão sendo executadas como pretendido.
No entanto, neste caso em particular, eu gostaria de ter uma janela de console aberta onde eu possa ver o log voando.
Eu sei que posso usar
C:\> tail -f thelogfile.log
se eu instalei cygwin (em todas as máquinas) ou algumas ferramentas proprietárias como o Baretail no Windows. Mas como só mudo para essas máquinas em caso de problemas, prefiro iniciar a tarefa agendada de tal forma que o usuário every veja imediatamente o log.
Alguma chance?
Obrigado!
O get-content -wait
do Powershell seguirá um arquivo como tail -f
Se você estiver procurando por algo semelhante à cauda, você pode usar o comando more ou o comando type.
C:\>more /?
Displays output one screen at a time.
MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename
command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]
MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]
[drive:][path]filename Specifies a file to display one
screen at a time.
command-name Specifies a command whose output
will be displayed.
/E Enable extended features
/C Clear screen before displaying page
/P Expand FormFeed characters
/S Squeeze multiple blank lines into a single line
/Tn Expand tabs to n spaces (default 8)
Switches can be present in the MORE environment
variable.
+n Start displaying the first file at line n
files List of files to be displayed. Files in the list
are separated by blanks.
If extended features are enabled, the following commands
are accepted at the -- More -- prompt:
P n Display next n lines
S n Skip next n lines
F Display next file
Q Quit
= Show line number
? Show help line
<space> Display next page
<ret> Display next line
Uma maneira possível de conseguir isso seria criar uma tarefa em execução como o usuário conectado no login usando schtasks. A tarefa executaria um arquivo de lote, com o último bit do arquivo de lote excluindo a tarefa e criando outra.
Você também pode querer fazer algumas verificações para ver se o usuário fez logoff (a criatividade pode ser necessária), já que você não precisa que suas tarefas continuem em execução enquanto a máquina estiver em uma tela de logon ou outra pessoa estiver registrada em.
Se eles não tiverem acesso para executar o processo original, você poderá executá-lo usando o trabalho do schtasks original e, em seguida, apenas fazer com que o arquivo de lote do usuário leia a saída.
Espero que esteja claro?
Estou um pouco confuso .. você só 'muda' para essas máquinas ocasionalmente, não quer instalar o tail.exe, mas você está instalando uma tarefa agendada?
Algumas ideias vêm à mente:
1) Coloque tail.exe em um local de rede e use-o diretamente. Dado que o UID é SYSTEM, o compartilhamento de rede precisa apenas de acesso $ COMPUTERNAME, acho que o grupo é Usuários em oposição a Usuários Autorizados, ou vice-versa
2) Execute o trabalho em si na área de trabalho do usuário: Use psexec. Tem uma opção -i (nterativa). Então, psexec -accepteula -s -i cmd /k echo hello
. Você pode omitir o -s se o trabalho de planejamento já estiver fornecendo o sistema. Além disso, o / k é apenas para prova de conceito, você usaria / c normalmente.
3) Escreva um programa:)