Подтвердить что ты не робот

Как я могу перенаправить вывод PowerShell при запуске из планировщика задач?

При запуске простого скрипта PowerShell из планировщика задач я бы хотел перенаправить вывод в файл.

Об этой самой теме есть длинная ветка здесь, но пока не ясно, достигли ли они в итоге наиболее подходящего решения. Мне интересно, если кто-нибудь на Qaru также решил эту проблему, и как они это сделали?

4b9b3361

Ответ 1

Вот команда, которая работала для меня. Мне не понравилась идея перенаправления вывода в script, так как это затрудняло бы запуск вручную.

powershell -windowstyle minimized -c "powershell -c .\myscript.ps1 -verbose >> \\server\myscript.log 2>&1"

Ответ 2

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

    Start-Transcript -path $LogFile -append

    <Body of the script>

    Stop-Transcript

Ответ 3

В Windows 7 у меня работает следующее:

 powershell -command c:\temp\pscript.ps1 2>&1 > c:/temp/apickles.log

В графическом интерфейсе планировщика задач Windows 7:

 program = "Powershell"
 arguments = "-command c:\temp\pscript.ps1 2>&1 > c:/temp/apickles.log"

Обратите внимание, что "-file" не работает, поскольку все параметры после имени файла интерпретируются как параметры файла. Обратите внимание, что "2> & 1" также перенаправляет вывод ошибок в файл журнала. Более поздние версии PowerShell делают это немного по-другому.

Ответ 4

Я бы сделал:
Создайте функцию для вызова вашего скрипта и перенаправьте вывод этой функции следующим образом:

.ps1:

function test{
    # Your simple script commands
    ls c:\temp -Filter *.JPG
    ls z:\ # Non-existent directory
}

test *> c:\temp\log.txt

Вот файл журнала:

    Répertoire : C:\temp


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---        07/06/2008     11:06     176275 HPIM1427.JPG
-a---        07/06/2008     11:06      69091 HPIM1428.JPG
-a---        07/06/2008     11:06     174661 HPIM1429.JPG


ls : Lecteur introuvable. Il n'existe aucun lecteur nommé « z ».
Au caractère C:\temp\test.ps1:14 : 1
+ ls z:\ #non existent dir
+ ~~~~~~
    + CategoryInfo          : ObjectNotFound: (z:String) [Get-ChildItem], Driv
   eNotFoundException
    + FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.GetC
   hildItemCommand

Вы можете контролировать то, что хотите выводить, с помощью новых операторов перенаправления V3:

Do-Something 3> warning.txt  # Writes warning output to warning.txt
Do-Something 4>> verbose.txt # Appends verbose.txt with the verbose output
Do-Something 5>&1            # Writes debug output to the output stream
Do-Something *> out.txt      # Redirects all streams (output, error, warning, verbose, and debug) to out.txt

Ответ 5

Сочетание всех предыдущих ответов действительно помогло мне...

Моя проблема заключалась в том, что мне нужно было выполнить сценарий PowerShell через WinRM как часть поставщика Packer, и он продолжал давать сбой из-за проблем с правами. Чтобы обойти это, нужно выполнить задачу по расписанию, но мне нужно было передать аргументы скрипту и получить выходные данные, чтобы подтвердить все пройденное.

Этот фрагмент хорошо сработал для меня:

# Generate a unique ID for this execution
$guid = [guid]::NewGuid()
$logFile = "C:\Windows\Temp\$guid.log"

$argument = "-NoProfile -ExecutionPolicy unrestricted -Command ""& {""$ScriptPath"" $ScriptArgs} 2>&1 > $logFile"""

$a = New-ScheduledTaskAction -Execute "powershell.exe" -Argument $argument
Register-ScheduledTask -TaskName $TaskName  -RunLevel Highest -User $username -Password $password -Action $a | Start-ScheduledTask
do {
    Start-Sleep -Seconds 30
    $task = Get-ScheduledTask -TaskName $TaskName
} while ($task.State -eq 4)

Полный сценарий можно найти здесь:

https://gist.github.com/dev-rowbot/fa8b8dadf1b3731067a93065db3e1bba

Ответ 6

Возможно, было бы проще использовать Start-Transcript для прямого входа в файл:

# Get script name
$ScriptFullPath = $MyInvocation.MyCommand.Path
# Start logging stdout and stderr to file
Start-Transcript -Path "$ScriptFullPath.log" -Append

[Some PowerShell commands]

# Stop logging
Stop-Transscript

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

Ответ 7

PowerShell 3 и более поздних версий позволяет перенаправлять отдельные потоки (out, verbose и error). Однако планировщик задач их не понимает. Это PowerShell, который делает перенаправление.

Решение @cmcginty на полпути работает, так как PowerShell вызывает PowerShell. Поддерживаются только стандартные потоки (ошибка и выход). Если вы хотите использовать все потоки, которые вам нужно использовать:

Программа или сценарий: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

Аргумент: -windowstyle minimized –NonInteractive –NoProfile -c "powershell -c path_to_ps1.ps1 4>>verbose.log 5>>debug.log"

Начало в: path_to_ps1

Ответ 8

Приведенный ниже выводит подробный вывод на экран, а также записывает его в файл.

something you're doing -Verbose 4>&1 | Tee-Object "C:\logs\verb.log" -Append