如何在PowerShell中为高级函数生成非终止错误

时间:2013-12-05 06:27:22

标签: powershell

我想要一些像下面这样的功能

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生成非终止错误,任何想法如何做到这一点?提前谢谢你!

2 个答案:

答案 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帮助主题。