我有下面的代码经过并获取预定的任务信息,并将屏幕上出现的输出放到日志文件中。
但是,我注意到的是,对于“访问被拒绝”的服务器,所有错误都会被记录,但是如何在日志文件中记录这些错误。
以下是代码:
Start-Transcript -path $scheduledpath\logging.txt -append
foreach ($name in $names)
{
Write-Host "Running Against Server $name" -ForegroundColor Magenta
if ( Test-Connection -ComputerName $name -Count 1 -ErrorAction SilentlyContinue )
{
#$Command = "schtasks.exe /query /S $name /fo CSV /v >c:\tools\Scheduled\$name.csv"
$Command = "schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv"
Invoke-Expression $Command
Clear-Variable Command -ErrorAction SilentlyContinue
}
else{
Write-Host "$name is Down" -ForegroundColor Red
}
}
Stop-Transcript
以下是屏幕上的输出:
> Running Against Server SV064909
> SV064909 is Down
> Running Against Server SV081372
> SV081372 is Down
> Running Against Server YBEF008690_vorher_SV064930
> YBEF008690_vorher_SV064930 is Down
> Running Against Server Alt_SV064921
> Alt_SV064921 is Down
> Running Against Server SV073632
> ERROR: Access is denied.
> Running Against Server SV073633
> ERROR: Access is denied.
以下是LOG文件中的输出....没有访问被拒绝显示...?
> Running Against Server SV064909
> SV064909 is Down
> Running Against Server SV081372
> SV081372 is Down
> Running Against Server YBEF008690_vorher_SV064930
> YBEF008690_vorher_SV064930 is Down
> Running Against Server Alt_SV064921
> Alt_SV064921 is Down
> Running Against Server SV073632
> Running Against Server SV073633
答案 0 :(得分:15)
连接错误315857中报告了本机命令输出未记录在Start-Transcript输出中但输出到控制台的此行为。请参阅解决方案以获取可能的解决方案。
答案 1 :(得分:11)
最简单的解决方法是将本机命令的结果传递给Out-Host
schtasks.exe /query /S $name /fo CSV /v >$scheduledpath\$name.csv | Out-Host
答案 2 :(得分:3)
以上都不适合我。 我找到a link from 2009讨论了这个问题。但微软blog from 2010为我解决了这个问题。
简而言之,将本机命令输出传递给Out-Default。
schtasks.exe /query /S $name /fo CSV /v | Out-Default
{我自己并没有真正尝试过那条线,但是你明白了。}
答案 3 :(得分:1)
啊,正确的答案应该是:
$ Command =“schtasks.exe / query / S $ name / fo CSV / v 2>& 1> $ scheduledpath \ $ name.csv”
即。管道stderror(管道2)到stdout(管道1),这样两者都显示在stdout中。
答案 4 :(得分:0)
{{1}}
我在脚本顶部的一行中使用了Write-output, 在那之后他们都是Write-Host。但是现在每个“写入”输出都显示在我的脚本中。