Powershell存储变量到文件方案咨询:用于设备催还邮件提醒脚本
存储方案推荐
不推荐使用纯文本或.ps1格式存储数据:纯文本无结构化标识,你需要自己写分割、解析逻辑,很容易出现格式兼容问题;.ps1是可执行脚本文件,存储动态业务数据不仅修改维护麻烦,还存在恶意代码注入的安全风险。优先选择CSV或JSON格式,两种都是结构化文本格式,Powershell原生支持读写,不需要额外依赖,计算时长、读取变量都非常方便。
方案1:CSV格式(适合表格型数据,可读性高,可直接用Excel编辑核对)
你可以按业务需要设计以下必填字段,示例CSV结构如下:
用户名,用户邮箱,首次提醒日期,直属经理邮箱,经理上级邮箱,设备编号,是否已归还 张三,zhangsan@corp.com,2024-05-01,lisi@corp.com,wangwu@corp.com,NB2023001,False 赵六,zhaoliu@corp.com,2024-05-20,sunqi@corp.com,zhouba@corp.com,NB2023123,False
Powershell读写示例:
# 读取所有提醒记录,直接生成结构化对象 $reminderRecords = Import-Csv -Path ".\设备回收提醒记录.csv" -Encoding UTF8 foreach ($record in $reminderRecords) { # 跳过已归还的用户 if ($record.是否已归还 -eq "True") { continue } # 转换日期格式计算间隔时长 $firstRemindDate = [DateTime]$record.首次提醒日期 $daysPassed = (Get-Date).Subtract($firstRemindDate).TotalDays # 判断抄送范围 $ccList = @() if ($daysPassed -ge 21) { # 满3周抄送直属经理 $ccList += $record.直属经理邮箱 } if ($daysPassed -ge 42) { # 满6周额外抄送经理上级 $ccList += $record.经理上级邮箱 } # 后续发送邮件的业务逻辑 }
新增/更新记录示例:
# 构造新的提醒记录 $newRecord = [PSCustomObject]@{ 用户名 = "钱九" 用户邮箱 = "qianjiu@corp.com" 首次提醒日期 = (Get-Date).ToString("yyyy-MM-dd") 直属经理邮箱 = "zhengshi@corp.com" 经理上级邮箱 = "sunyi@corp.com" 设备编号 = "NB2024005" 是否已归还 = "False" } # 追加到CSV文件 $newRecord | Export-Csv -Path ".\设备回收提醒记录.csv" -Encoding UTF8 -Append -NoTypeInformation
方案2:JSON格式(适合嵌套结构数据,后续扩展字段更灵活)
如果后续你需要存储历史提醒时间、设备明细这类嵌套内容,用JSON更合适,示例结构:
[ { "用户名": "张三", "用户邮箱": "zhangsan@corp.com", "首次提醒日期": "2024-05-01", "直属经理邮箱": "lisi@corp.com", "经理上级邮箱": "wangwu@corp.com", "设备编号": "NB2023001", "是否已归还": false, "历史提醒记录": ["2024-05-01", "2024-05-08", "2024-05-15"] } ]
Powershell读写示例:
# 读取JSON记录 $reminderRecords = Get-Content -Path ".\设备回收提醒记录.json" -Encoding UTF8 | ConvertFrom-Json # 写入修改后的记录 $reminderRecords | ConvertTo-Json | Out-File -Path ".\设备回收提醒记录.json" -Encoding UTF8
注意事项
- 日期统一存储为
yyyy-MM-dd标准格式,转换DateTime类型时不会出现区域兼容问题 - 如果脚本配置为定时任务运行,需要给脚本运行账户开通存储文件的读写权限
内容的提问来源于stack exchange,提问作者Listor
相关产品推荐
相关产品推荐

