You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell如何检查WIA COM对象是否存在指定属性

你可以通过遍历WIA对象的Properties集合判断目标属性是否存在,避免调用不存在的属性报错,两种常用实现方式如下:

方法1:提前校验属性是否存在(推荐)

先获取所有属性名称,判断目标属性是否在集合内,再执行取值逻辑:

# 创建WIA ImageFile对象并加载图片
$image = New-Object -ComObject Wia.ImageFile
$image.LoadFile("C:\Absolute\path\to\my.jpg")

# 提取所有属性名称列表
$allPropNames = $image.Properties | Select-Object -ExpandProperty Name

# 校验GpsLatitude是否存在
if ($allPropNames -contains 'GpsLatitude') {
    $latitude = $image.Properties.Item('GpsLatitude').Value
    # 后续处理纬度的自定义逻辑
    Write-Host "提取到纬度:$latitude"
} else {
    Write-Host "当前图片无GPS纬度属性"
}

方法2:异常捕获(简易写法)

如果不需要精细化的错误区分,直接用try catch包裹取值逻辑即可:

$image = New-Object -ComObject Wia.ImageFile
$image.LoadFile("C:\Absolute\path\to\my.jpg")

try {
    $latitude = $image.Properties.Item('GpsLatitude').Value
    Write-Host "提取到纬度:$latitude"
} catch {
    Write-Host "当前图片无GPS纬度属性"
}

批量处理扩展

如果需要批量提取文件夹内所有图片的GPS信息,可以用以下脚本:

Get-ChildItem -Path "C:\目标图片文件夹路径" -Filter *.jpg -Recurse | ForEach-Object {
    $image = New-Object -ComObject Wia.ImageFile
    $image.LoadFile($_.FullName)
    $propNames = $image.Properties | Select-Object -ExpandProperty Name
    
    [PSCustomObject]@{
        文件路径 = $_.FullName
        纬度 = if ($propNames -contains 'GpsLatitude') { $image.Properties.Item('GpsLatitude').Value } else { "无数据" }
        经度 = if ($propNames -contains 'GpsLongitude') { $image.Properties.Item('GpsLongitude').Value } else { "无数据" }
    }
} | Export-Csv -Path "C:\GPS信息导出.csv" -Encoding UTF8 -NoTypeInformation

内容的提问来源于stack exchange,提问作者dwids

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:42:03