提问人:Teknowledgist 提问时间:11/4/2023 更新时间:11/4/2023 访问量:33
如何在powershell中隐藏任务延迟输出?
How to hide task delay output in powershell?
问:
我正在尝试在 PoSh 脚本中使用任务延迟 .NET 函数,但是当我尝试保持安静时,我发现奇怪的行为。
[system.threading.tasks.task]::Delay(1000*$seconds)
等待几秒钟并给出如下输出:$seconds
Result : System.Threading.Tasks.VoidTaskResult
Id : 99
Exception :
Status : RanToCompletion
IsCanceled : False
IsCompleted : True
CreationOptions : None
AsyncState :
IsFaulted : False
AsyncWaitHandle : System.Threading.ManualResetEvent
CompletedSynchronously : False
我不想要那个输出,但这些中的任何一个
$null = [system.threading.tasks.task]::Delay(1000*$seconds)
[system.threading.tasks.task]::Delay(1000*$seconds) |out-null
[void]([system.threading.tasks.task]::Delay(1000*$seconds))
除非很大,否则立即返回,因此延迟最小。为什么会这样以及如何解决它?$seconds
谢谢。
答:
1赞
mklement0
11/4/2023
#1
直接的解决方法是调用 .Wait
() 等待 [System.Threading.Tasks.Task]::D elay()
;由于 has return type ,它不输出任何内容,因此您不需要输出抑制:.Wait()
void
[System.Threading.Tasks.Task]::Delay(1000 * $seconds).Wait()
但是,一种更简单、更有效的同步等待方法是调用 [System.Threading.Thread]::Sleep():
[System.Threading.Thread]::Sleep(1000 * $seconds)
或者,使用 PowerShell 的 Start-Sleep
cmdlet:
Start-Sleep -Seconds $seconds
评论
[system.threading.tasks.task]::Delay(1000*$seconds) |format-table|out-null