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

如何在PowerShell中从文件导入ConvertFrom-String模板内容?

导入自定义格式的PowerShell文本文件并解析格式说明

你生成的这个文件不是标准的PowerShell数据文件(PSD1),只是用Here-String创建的自定义纯文本格式,没法直接用Import-PowerShellDataFile导入,得自己写逻辑解析。

一、导入并解析文件的方法

可以按以下步骤处理这个文件:

  1. 读取文件内容,按空行拆分出每个用户的独立数据块
  2. 对每个用户块,拆分键值对,提取属性和对应的值

示例代码:

# 读取文件内容
$content = Get-Content ./full_template.psd1 -Raw

# 按空行拆分用户块,过滤掉空内容
$userBlocks = $content -split '\n\n' | Where-Object { $_ -match '\S' }

# 遍历每个用户块,解析成结构化对象
$users = foreach ($block in $userBlocks) {
    $userProps = [ordered]@{}
    # 按行拆分键值对
    $lines = $block -split '\n' | Where-Object { $_ -match '\S' }
    foreach ($line in $lines) {
        # 按第一个冒号分割属性名和值部分
        $key, $value = $line -split ':', 2
        $key = $key.Trim()
        # 提取{}包裹里的实际值,比如从{UserPrincipalName*:LeeG@lazydev.com}中取出LeeG@lazydev.com
        $actualValue = ($value.Trim() -replace '^\{.+\:(.+)\}$', '$1').Trim()
        # 对IsLicensed字段做布尔类型转换
        if ($key -eq 'IsLicensed') {
            $userProps[$key] = [bool]$actualValue
        } else {
            $userProps[$key] = $actualValue
        }
    }
    [PSCustomObject]$userProps
}

# 查看解析后的结构化结果
$users

运行后会得到可直接操作的用户对象集合,方便后续处理。

二、关于格式里的冒号说明

这里的冒号分两种作用:

  • 行内的第一个冒号:是自定义的键值分隔符,用来区分属性名(比如UserPrincipalName)和属性值部分
  • {}内部的冒号:只是值段里的自定义格式,用来区分字段标识(比如UserPrincipalName*里的*大概率表示该字段为必填项)和实际业务值(比如LeeG@lazydev.com)

这种格式是完全自定义的,不属于PowerShell官方规范的PSD1格式,所以官方文档里不会有相关说明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:45:37