当运行Task Scheduler中一个简单的PowerShell脚本,我想输出重定向到一个文件中。
有一个关于这个题目很长的线程在这里 ,但其并不清楚,如果他们达到最终的最合适的解决方案。 我有兴趣,如果上,因此任何人也解决了这个问题,他们是怎么做到的。
当运行Task Scheduler中一个简单的PowerShell脚本,我想输出重定向到一个文件中。
有一个关于这个题目很长的线程在这里 ,但其并不清楚,如果他们达到最终的最合适的解决方案。 我有兴趣,如果上,因此任何人也解决了这个问题,他们是怎么做到的。
这里是为我工作的命令。 我不喜欢重定向脚本的输出,因为这将使其难以手动运行的想法。
powershell -windowstyle minimized -c "powershell -c .\myscript.ps1 -verbose >> \\server\myscript.log 2>&1"
我用的成绩单功能,以帮助这一点。 只要它包含在你的代码,它输出的所有(会)的屏幕内容到一个日志文件。
Start-Transcript -path $LogFile -append
<body of script>
Stop-Transcript
对我来说,以下适用于Windows 7:
powershell -command c:\temp\pscript.ps1 2>&1 > c:/temp/apickles.log
在Win7的任务计划程序GUI:
program = "Powershell"
arguments = "-command c:\temp\pscript.ps1 2>&1 > c:/temp/apickles.log"
请注意,“-file”不起作用,因为文件名之后的所有参数被解释为PARAMS的文件。 注意,“2>&1”错误输出到日志文件重定向为好。 PowerShell中的后来的版本稍有不同的方式做到这一点。
我做对子级:创建一个函数来调用脚本和重定向这样这个函数的输出:
名为.ps1:
function test{
#your simple script commands
ls c:\temp -Filter *.JPG
ls z:\ #non existent dir
}
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
我知道这已经被回答了几次,但真的以上所有的答案的组合帮我出...
我的问题是,我需要在执行WinRM的PowerShell脚本作为帕克置备的一部分,它一直未能由于权限问题。 解决这个问题的办法是执行一个计划任务,但我需要将参数传递给脚本,并获得输出,以及确认一切都过去了。
这段代码的工作很适合我:
# 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
这将是可能更容易使用启动成绩单,以便直接记录到文件中:
# 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
日志文件将在同一目录下的脚本。
上wardsallows各个流的powershell 3(下,冗长,误差)被重定向。 但是任务计划程序不理解他们。 它是不重定向PowerShell的。
@ cmcginty的解决方案一半的工作,因为PowerShell是调用PowerShell中,它仅支持标准流(错误,出来)。 如果你想用你需要使用所有strewams
程序或脚本: 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
此发送冗长了把t时的画面,以及它记录到文件中花了一段时间来算出这个所以这个线程似乎是最恰当的地方,把它
something your doing -Verbose 4>&1|Tee-Object "C:\logs\verb.log" -Append