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

如何在PowerShell中写入数组并以可正常索引操作的形式读回?

解决方案

你的问题核心在于用Out-File保存的是对象的文本展示形式,而非对象本身,所以读回来的是字符串数组,自然没法像操作原自定义对象那样索引和修改属性。要保留对象结构,应该用PowerShell的序列化工具:Export-Clixml和Import-Clixml。

完整实现步骤

1. 初始化/读取日志数组

先检查日志文件是否存在,存在则读取已有日志,不存在则初始化新数组:

$logPath = "C:/R_projects/russ_stuff/Robjects_log.xml"
$today = Get-Date -Format "MM/dd/yyyy"

# 读取已有日志或初始化
if (Test-Path -Path $logPath) {
    $Robjects_log = Import-Clixml -Path $logPath
} else {
    # 初始化新日志数组
    $Robjects_log = @(
        [pscustomobject]@{
            log_date = $today;
            log_covid_cases = "Not Checked";  
            log_allspecimens = "Not Checked";  
            log_snapshot = "Not Checked";
            log_r_script = "No";
            log_final_status  = "Not Checked";
            log_continue_checking = "Yes"
        }
    )
}

2. 修改日志属性

现在可以像之前一样正常索引和修改对象属性:

# 找到今日的日志条目
$todayEntry = $Robjects_log | Where-Object { $_.log_date -eq $today }

# 如果今日条目不存在,添加新条目(避免重复运行脚本时重复创建)
if (-not $todayEntry) {
    $newEntry = [pscustomobject]@{
        log_date = $today;
        log_covid_cases = "Not Checked";  
        log_allspecimens = "Not Checked";  
        log_snapshot = "Not Checked";
        log_r_script = "No";
        log_final_status  = "Not Checked";
        log_continue_checking = "Yes"
    }
    $Robjects_log += $newEntry
    $todayEntry = $newEntry
}

# 修改属性示例
$todayEntry.log_covid_cases = "Checked"
$todayEntry.log_r_script = "Yes"

3. 保存日志数组

用Export-Clixml保存,保留对象结构:

$Robjects_log | Export-Clixml -Path $logPath -Force

为什么原来的方法不行?

  • Format-Table是用来生成可读的文本表格的,会丢失对象的原始结构信息。
  • Out-File只是把输出的文本内容写入文件,不管输入是对象还是字符串,最终存的都是文本。
  • 用Get-Content读回来的是字符串数组,每个元素是文本行,不是你定义的pscustomobject,所以没法用.log_date这类属性访问。

额外提示

  • 日志文件用.xml后缀更直观,因为Export-Clixml生成的是XML格式的序列化内容。
  • -Force参数确保覆盖已有文件,适合每日更新场景。
  • 用Where-Object筛选条目比直接索引更可靠,尤其是数组中有多个条目时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:41:46