如何在PowerShell中检查指定类型是否已加载?
在PowerShell中检查.NET类型是否已加载的正确方法
先说说你之前方法的问题
- 用
Get-TypeData不对:这个命令获取的是PowerShell为.NET类型添加的扩展数据(比如自定义属性、脚本方法),并非已加载的.NET类型本身,所以永远返回"Not loaded"是正常的。 - 示例2的
[Type]::GetType参数错误:你传入的System.Net.Http是程序集名称,不是具体的类型全名,自然查不到对应结果。
正确的检查方法
方法1:检查单个具体类型是否已加载
需要指定完整的类型全名(比如System.Net.Http.HttpClientHandler),使用[Type]::GetType的正确写法:
$targetType = "System.Net.Http.HttpClientHandler" # 第二个参数$false表示找不到类型时不抛出异常,返回null $typeExists = [Type]::GetType($targetType, $false) -ne $null if ($typeExists) { Write-Output "类型 $targetType 已加载" } else { Write-Output "类型 $targetType 未加载,正在加载..." Add-Type -AssemblyName "System.Net.Http" }
方法2:检查整个程序集是否已加载
如果要确认System.Net.Http这类整个程序集是否被加载,可以遍历当前应用域的已加载程序集:
$assemblyName = "System.Net.Http" $assemblyLoaded = [AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.GetName().Name -eq $assemblyName } -ne $null if ($assemblyLoaded) { Write-Output "程序集 $assemblyName 已加载" } else { Write-Output "程序集 $assemblyName 未加载,正在加载..." Add-Type -AssemblyName $assemblyName }
补充说明
PowerShell中确实没有Get-Type这个Cmdlet,要检查.NET类型或程序集的加载状态,以上两种方法是直接有效的。如果只是想确保某个类型可用,你最开始的try/catch写法也能工作,但提前检查的方式更符合你的需求。
内容的提问来源于stack exchange,提问作者Jelphy
相关产品推荐
相关产品推荐

