我想要一些像下面这样的功能
function get-diskinfo {
[string[]]$ComputerName
# some stuff here
}
所以我可以像
一样使用它get-diskinfo -ComputerName com1,com2,com3
if (!$?) { # I want to caller to check this, so the experience is same as built-in cmdlet
write-error "failed to get disk info for some computer"
}
然而在谷歌搜索后,仍然不知道从get-diskinfo生成非终止错误,任何想法如何做到这一点?提前谢谢你!
答案 0 :(得分:2)
目前,您的功能还不是高级功能。将其更改为此以使其成为高级功能:
function Get-DiskInfo {
[CmdletBinding()]
param(
[Parameter(Mandatory=$true, Position=0)]
[Alias("CN")]
[ValidateNotNull()]
[string[]]
$ComputerName
)
...
}
为了获得$pscmdlet
的访问权限,必须成为真正的高级功能。要编写非终止错误,请使用$pscmdlet.WriteError()
。你可以得到幻想并做这样的事情:
$ex = new-object System.Management.Automation.ItemNotFoundException "Cannot find path '$Path' because it does not exist."
$category = [System.Management.Automation.ErrorCategory]::ObjectNotFound
$errRecord = new-object System.Management.Automation.ErrorRecord $ex, "PathNotFound", $category, $Path
$psCmdlet.WriteError($errRecord)
答案 1 :(得分:1)
通常,使用Write-Error
cmdlet创建非终止错误,或者正如Keith向您展示的那样,使用pscmdlet.WriteError方法。在任何情况下,您必须捕获代码中发生的任何终止错误,使用try and catch
块,然后使用上述方法之一发出非终止错误。
有关详细信息,请参阅about_Try_Catch_Finally
帮助主题。