是否有可能使用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