4

给定以下代码段

$drives = Get-PSDrive

foreach($drive in $drives)
{
    Write-Host $drive.Name "`t" $drive.Root
    Write-Host " - " $drive.Free "`t" $drive.PropertyDoesntExist
}   

drive.PropertyDoesntExist 属性不... erm... 存在,所以我希望会抛出一个错误,但它会返回一个空值。

我怎样才能得到错误或异常?

编辑-我不好-我一共问了 2 个问题,所以我把一个问题移到了一个单独的问题中。

4

1 回答 1

4

NextHop 博客为这个问题提供了一个很好的解决方案。它不会给你一个错误,而是一个布尔值。您可以使用Get-Member来获取对象类型的所有真实属性的集合,然后匹配您想要的属性。

这是字符串的示例:

PS C:\> $test = "I'm a string."
PS C:\> ($test | Get-Member | Select-Object -ExpandProperty Name) -contains "Trim"
True
PS C:\> ($test | Get-Member | Select-Object -ExpandProperty Name) -contains "Pigs"
False

如果您明确想要一个错误,您可能需要查看Set-StrictmodeSet-StrictMode -version 2捕获不存在的属性。完成后,您也可以轻松将其关闭:

PS C:\> Set-StrictMode -version 2
PS C:\> "test".Pigs
Property 'Pigs' cannot be found on this object. Make sure that it exists.
At line:1 char:8
+ "test". <<<< Pigs
    + CategoryInfo          : InvalidOperation: (.:OperatorToken) [], RuntimeException
    + FullyQualifiedErrorId : PropertyNotFoundStrict

PS C:\> Set-StrictMode -off
于 2013-09-19T18:04:36.040 回答