Powershell 运行空间写入日志文件

Powershell 运行空间写入日志文件,powershell,logging,scheduled-tasks,Powershell,Logging,Scheduled Tasks,我希望在Register ScheduledJob中使用它来重新启动服务器并记录输出 问题是,输出文件的管道是否足以进行日志记录?还是有更优雅的解决方案来解决我的问题? 正在创建计划作业: $trigger = New-JobTrigger -once -at $day $script = [ScriptBlock]::Create("D:\Scripts\AsyncReboot.ps1 | Out-File -force d:\logs\$comp-Reboot.log") Registe

我希望在
Register ScheduledJob
中使用它来重新启动服务器并记录输出

问题是,输出文件的管道是否足以进行日志记录?还是有更优雅的解决方案来解决我的问题?

正在创建计划作业:

$trigger = New-JobTrigger -once -at $day
$script = [ScriptBlock]::Create("D:\Scripts\AsyncReboot.ps1 |
  Out-File -force d:\logs\$comp-Reboot.log")
Register-ScheduledJob -Name $comp -Credential $user -Trigger $trigger -ScriptBlock $script
现在
D:\Scripts\AsyncReboot.ps1
将成为
Invoke ScriptAsync
PowerShell函数,其中包括执行重新启动的脚本块以及标准的
$list=Get Content D:\Scripts\Servers.txt

$list = gc D:\Scripts\Servers.txt
Reboot-Async -ScriptBlock $AsyncRebootLogging -InputObject `
  $list -Timeout 120 -MaxThreads 22 | FT -auto
重新启动脚本,这将作为Invoke ScriptAsync的脚本块运行,并且不会创建输出。当我简单地执行了一个
“测试$server的重新启动”


只要脚本块将要记录的数据转储到管道中,就可以正常工作。这是我不确定的,
D:\Scripts\AsyncReboot.ps1
只是脚本中的
Invoke ScriptAsync
函数。我对“
”helloworld for$server“
的测试运行成功,完成了预定的作业,一切正常。我们将对其进行测试,看看是否有效。如果你不想真正重新启动电脑,那么,这就是-TIF的作用。它不起作用。我可以通过一个简单的
“Echo test”
从运行空间会话中获得输出,但实际脚本运行时却不一样。您希望得到什么输出?如果您的脚本中没有输出到管道的内容,那么即使它成功运行,您也不会得到任何回报。
$AsyncRebootLogging = {
 Param([Parameter(Mandatory=$true)][string]$server)
 $ErrorActionPreference = "SilentlyContinue"

Try{
Get-EventLog -ComputerName $server -LogName system | Where-Object {$_.EventID -eq '6005'} | `
 Select MachineName,TimeGenerated,Message | select -first 1

(Invoke-WmiMethod -ComputerName $server -Path "Win32_Service.Name='HealthService'" -Name `
 PauseService).ReturnValue | Out-Null

Restart-Computer -ComputerName $server -Force

do {"Wait for [$server] to reboot";Start-Sleep -Seconds 4} while (Test-Path "\\$server\C$")

do {"Waiting for [$server]";Start-sleep -Seconds 4} while (-not(Test-Path "\\$server\C$"))

Get-EventLog -ComputerName $server -LogName system | Where-Object {$_.EventID -eq '6005'} | `
 Select MachineName,TimeGenerated,Message | select -first 1 | FT -auto

}#End Try.

Catch{
$errMsg = $_.Exception
"Failed with $errMsg"
}