是否有可能使用adavanced函數的特徵是在腳本塊Begin, Process, End
?使用開始,過程,結束在腳本塊
例如我有以下腳本塊:
$startStopService = {
Param(
[bool] $startService)
if ($startService){
...
Start-Service "My-Service"
}
else {
Stop-Service "My-Service"
}
}
因爲我希望能夠控制腳本塊的詳細輸出我想塊更改爲:
$startStopService = {
Param(
[bool] $startService)
Begin {
$oldPreference = $VerbosePreference
$VerbosePreference = $Using:VerbosePreference
}
Process {
if ($startService){
...
Start-Service "My-Service"
}
else {
Stop-Service "My-Service"
}
}
End {
# Restore the old preference
$VerbosePreference = $oldPreference
}
}
這裏有沒有可能使用Begin, Process, End
,儘管scriptblock不是一個cmdlet?我只是希望VerbosePreference
恢復到舊值,無論是否發生錯誤。當然,我可以使用try{}finally{}
作爲替代,但我發現Begin, Process, End
更直觀。
THX
我一直在尋找你的答案('CmdletBinding')的第二個選項。簡短的問題:'CmdletBinding'也可以在'Invoke-Command'下工作嗎?我們來說一下'Invoke-Command -session $ remoteSession -scriptblock $ startStopService -verbose'。 – Moerwald
@Moerwald根據文檔中的[[CommonParameters]] [[文檔]](https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell),簡短版本應爲_should_。芯/調用命令)。但是,當我嘗試它時,它不起作用。搜索,我發現[這篇文章](https://stackoverflow.com/questions/16197021/how-to-write-verbose-from-invoke-command),你已經閱讀。它提到這是一個錯誤;不知道是否是這種情況,或者我們的做法有錯誤。 – gms0ulman
Thx爲答案。是的,我閱讀過這篇文章。自從它3歲左右以來,我認爲可能有更好的方法。 – Moerwald