Tôi có tập lệnh PowerShell sử dụng Sự kiện hẹn giờ không đồng bộ (quy trình nền) để đo thời gian xảy ra một điều kiện nhất định trước khi thực hiện hành động thích hợp. Điều này hoạt động hoàn hảo tốt khi tôi chạy tập lệnh bên trong PowerGUI nhưng khi tôi chạy tập lệnh bằng cách sử dụng dot-sourcing hoặc chạy tập lệnh đó qua tệp bó thì hành động Sự kiện hẹn giờ không kích hoạt.Sự kiện hẹn giờ không đồng bộ PowerShell không hoạt động bên ngoài bảng điều khiển thử nghiệm
Đây là đoạn mã.
$timer = New-Object System.Timers.Timer
$timer.Interval = 10000
$timer.AutoReset = $true
$timeout = 0
$action = {
"timeout: $timeout" | Add-Content $loglocation
<more stuff here>
$timer.stop()
}
$start = Register-ObjectEvent -InputObject $timer -SourceIdentifier TimerElapsed -EventName Elapsed -Action $action
$timer.start()
while(1)
{
<do some testing here>
}
Vì vậy, khi nó hoạt động, tôi sẽ thấy đầu ra "timeout: XX" cứ 10 giây ghi vào nhật ký. Nhưng điều này chỉ xảy ra khi chạy bên trong trình chỉnh sửa. Khi tôi chạy nó thông qua tập tin thực thi không có gì xảy ra (mặc dù tôi có thể xác nhận vòng lặp while đang xử lý tốt).
Vì vậy, câu hỏi của tôi là tại sao trải nghiệm của tôi lại khác khi tôi chạy tập lệnh bên trong PowerGUI so với dòng lệnh? Suy nghĩ của tôi là có thể có một vấn đề với phạm vi hoặc song song đề nhưng tôi không chính xác chắc chắn vấn đề là gì. Ngoài ra tôi không chạy các sự kiện này bên trong bất kỳ chức năng hoặc vòng lặp nào.