PowerShell PnP查询SharePoint2019列表转HTML表格异常问题
问题原因
脚本无法生成正确HTML表格的核心问题如下:
Select-Object用法错误:你将4个需要展示的字段全部包裹在同一个脚本块{}中,管道最终输出的是仅含单个属性的对象,ConvertTo-Html只能识别到1列,无法生成预期的多列表格。- 字段取值未做适配:直接通过
$_["字段内部名"]取到的是SharePoint原始字段对象,日期类字段直接转HTML会输出非可读的类型信息,无法正常展示日期值。 - 冗余格式转换:给
$listitems赋值时已经执行了Out-String转换,调用Send-MailMessage时又重复套了一层Out-String,会导致邮件内容出现多余空行、格式错乱。 - 额外不规范写法:CAML查询中
FieldRef节点添加的Type='DateTime'属于无效属性,部分环境下可能导致查询结果不符合预期,建议删除。
修正后的完整脚本
$smtpserver = "-" $mailsender ="-" $mailReceiver = "-" $mailSubject = "Certificates about to expire" $Header = @" <style> TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;} TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black; background-color: #f0f0f0;} TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;} </style> "@ Import-Module "C:\PNP\SharePointPnPPowerShell2019\3.6.1902.2\SharePointPnPPowerShell2019.psd1" if ($cred -eq $null) { $cred = Get-Credential } Connect-PnPOnline "-" -Credentials $cred $list = Get-PnPList "-" # 修正CAML查询、字段选择与格式转换逻辑 $rawItems = Get-PnPListItem -List $list -Query "<View><Query><Where><Lt><FieldRef Name='Utg_x00e5_r'/><Value Type='DateTime'><Today OffsetDays='60'/></Value></Lt></Where></Query></View>" if ($rawItems.Count -eq 0) { $mailBody = "未来60天内无即将过期的证书记录" } else { $mailBody = $rawItems | Select-Object ` @{Name="证书标题";Expression={$_["Title"]}}, @{Name="所属农场";Expression={$_["Farm"]}}, @{Name="所属服务器";Expression={$_["Server"]}}, @{Name="过期时间";Expression={if($_["Utg_x00e5_r"]) {$_["Utg_x00e5_r"].ToString("yyyy-MM-dd")} else {"未填写"}}} | ConvertTo-Html -Head $Header | Out-String } # 移除冗余Out-String调用,直接发送邮件 Send-MailMessage -From $mailsender -to $mailReceiver -subject $mailSubject -body $mailBody -SmtpServer $smtpServer -Port 25 -BodyAsHtml
你可以根据实际需求修改
Select-Object中定义的列名、日期格式化规则。
内容的提问来源于stack exchange,提问作者Gatewarden
相关产品推荐
相关产品推荐

