PowerShell提取OneNote嵌套对象属性并导出为CSV的实现方法
解决方案
问题原因
PowerShell 的 Select-Object 默认只会读取对象的顶级属性,你直接传入 ParentSection.DisplayName 时,它会将整段字符串当做属性名去查找,而你的页面对象下不存在这个名称的顶级属性,所以返回空值。
正确实现方式
你可以使用计算属性来提取嵌套对象的属性值,有两种常用写法:
写法1:管道流式处理(更简洁)
直接通过管道遍历所有页面,不需要手写循环:
# 提取属性并导出为CSV $sPages | Select-Object ` Title, ` CreatedDateTime, ` @{ Name = 'ParentSectionDisplayName' Expression = {$_.ParentSection.DisplayName} } | Export-Csv -Path "OneNote页面导出.csv" -Encoding UTF8 -NoTypeInformation
参数说明:
@{...}结构是PowerShell的计算属性定义,Name是导出后CSV的列名,可以自定义,Expression是属性的取值逻辑,$_代表当前遍历到的单个页面对象-NoTypeInformation用于移除CSV文件开头多余的类型描述行-Encoding UTF8避免页面标题包含中文时出现乱码,如果需要用Excel默认打开不乱码,可以替换为-Encoding GB2312
写法2:foreach循环显式构造对象
如果你习惯用foreach循环的写法,可以手动构造输出对象:
# 遍历所有页面构造结果对象 $result = foreach ($s in $sPages) { [PSCustomObject]@{ Title = $s.Title CreatedDateTime = $s.CreatedDateTime ParentSectionDisplayName = $s.ParentSection.DisplayName } } # 导出到CSV $result | Export-Csv -Path "OneNote页面导出.csv" -Encoding UTF8 -NoTypeInformation
内容的提问来源于stack exchange,提问作者dwids
相关产品推荐
相关产品推荐

