Powershell 如何测试(可能的)未知类型?

Powershell 如何测试(可能的)未知类型?,powershell,types,powershell-core,Powershell,Types,Powershell Core,似乎有一个基于类的新类型加速器,包括名为[semver] 要在PowerShell核心环境中测试此特定类型,您可能会使用以下语法: $PSVersionTable.PSVersion -is [semver] 但如果您在脚本中实现此功能并在环境中运行此功能,则会出现错误: 当我将其与类型名(string)进行比较时,会出现类似的错误: (如果PowerShell区分提供[Type]或'String'作为比较,并且如果字符串无法转换,则只返回$False,这会很好/正确) 如果类型未知,测试类型

似乎有一个基于类的新类型加速器,包括名为
[semver]

要在PowerShell核心环境中测试此特定类型,您可能会使用以下语法:

$PSVersionTable.PSVersion -is [semver]
但如果您在脚本中实现此功能并在环境中运行此功能,则会出现错误:

当我将其与类型名(
string
)进行比较时,会出现类似的错误:

(如果PowerShell区分提供
[Type]
'String'
作为比较,并且如果字符串无法转换,则只返回
$False
,这会很好/正确)


如果类型未知,测试类型并防止任何错误的最佳方法是什么(在特定环境中,某些类型的运算符会发生这种情况)?

到目前为止,我能想到的最佳答案是:

$Object.PSTypeNames -Contains '.NET Framework type'
e、 g:

但这将使使用一个不可能的选项。

感谢您的回答:
(另见:)

例如:


如果将类型测试包装在
try/catch
块中会发生什么情况?@Lee_Dailey,是的,这确实有效,但通常会导致非常难看的额外语句,如:
try{$IsType=$PSVersionTable.PSVersion-is[semver]}catch{$IsType=$Null};如果($IsType){…
和我通常尽量避免
try/Catch
阻塞,我同意这会导致一些难看的代码…但这可以用一个函数来包装。答案中的方法和
try/Catch
看起来都很有效,所以选择适合你的风格。[咧嘴笑]
$PSVersionTable.PSVersion -is `semver`
Cannot convert the "semver" value of type "System.String" to type "System.Type".
At line:1 char:1
+ $PSVersionTable.PSVersion -is 'semver'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], RuntimeException
    + FullyQualifiedErrorId : RuntimeException
$Object.PSTypeNames -Contains '.NET Framework type'
$PSVersionTable.PSVersion.PSTypeNames -Contains 'System.Management.Automation.SemanticVersion'
'UnknownType' -as [type] -and $object -is [UnknownType]
'semver' -as [type] -and $PSVersionTable.PSVersion -is [semver]