(GSV).Name|%{If($_ -like "*net*"){ $_ ; Break }};Pause
當我從 PowerShell 視窗運行上述行時,將輸出“ Netlogon ”。
當我運行包含同一行的 PS1 檔案時,會出現一個 PowerShell 視窗,然后立即消失,并且不會輸出任何內容。
那條線有什么問題?
uj5u.com熱心網友回復:
從幫助主題:about_Break
不要在回圈外使用 break
switch、 或trap當
break在直接支持它的構造(回圈、、、)之外使用時switch,trapPowerShell 會在呼叫堆疊中查找封閉構造。如果它找不到封閉的構造,則當前運行空間被安靜地終止。這意味著在支持它的封閉結構之外無意中使用了 break 的函式和腳本可能會無意中終止它們的呼叫者。
在管道中斷(例如
ForEach-Object腳本塊)中使用 break 不僅會退出管道,而且可能會終止整個運行空間。
重寫您的腳本以用于Where-Object過濾輸入,然后Select-Object -First 1在物件與過濾器匹配時用于終止管道:
(GSV).Name |Where-Object { $_ -like "*net*" } |Select-Object -First 1; Pause
在這種特殊情況下,您還可以使用Get-Service's 過濾功能將初始查詢范圍縮小到僅匹配服務,從而消除對Where-Object所有服務的需求:
Get-Service -Name *net* |Select -ExpandProperty Name -First 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/454118.html
