如何读取键值对作为PowerShell字符串处理的模板?

问题描述 投票:0回答:1

非常简洁地将此处的字符串写入文件:

PS C:\Users\saunders\Desktop\misc>
PS C:\Users\saunders\Desktop\misc> @'
>> foo : {abc}
>> bar : {123}
>> baz : {a1b2c3}
>> '@ | Out-File here_string_output.txt
PS C:\Users\saunders\Desktop\misc>
PS C:\Users\saunders\Desktop\misc> cat .\here_string.txt
@'
foo : {abc}
bar : {123}
baz : {a1b2c3}
'@
PS C:\Users\saunders\Desktop\misc>
PS C:\Users\saunders\Desktop\misc> $hereString = @'
>> foo : {abc}
>> bar : {123}
>> baz : {a1b2c3}
>> '@
PS C:\Users\saunders\Desktop\misc>
PS C:\Users\saunders\Desktop\misc> $hereString
foo : {abc}
bar : {123}
baz : {a1b2c3}
PS C:\Users\saunders\Desktop\misc>

如何逆向,将

here_string.txt
的内容读入
$hereString
变量?

------------------------问题的原始形式--------------------

使用样本数据:

PS C:\Users\saunders\Desktop\misc>
PS C:\Users\saunders\Desktop\misc> $recordTemplate = @'
>> UserPrincipalName : {UserPrincipalName*:[email protected]}
>> DisplayName       : {DisplayName:Lee Gu}
>> Title             : {Title:jr engineer}
>> UserType          : {UserType:Member}
>> IsLicensed        : {IsLicensed:True}
>>
>> UserPrincipalName : {UserPrincipalName*:[email protected]}
>> '@
PS C:\Users\saunders\Desktop\misc>
PS C:\Users\saunders\Desktop\misc>
PS C:\Users\saunders\Desktop\misc> $recordTemplate
UserPrincipalName : {UserPrincipalName*:[email protected]}
DisplayName       : {DisplayName:Lee Gu}
Title             : {Title:jr engineer}
UserType          : {UserType:Member}
IsLicensed        : {IsLicensed:True}

UserPrincipalName : {UserPrincipalName*:[email protected]}
PS C:\Users\saunders\Desktop\misc>
PS C:\Users\saunders\Desktop\misc> cat .\recordTemplate.txt
$recordTemplate = @'
UserPrincipalName : {UserPrincipalName*:[email protected]}
DisplayName       : {DisplayName:Lee Gu}
Title             : {Title:jr engineer}
UserType          : {UserType:Member}
IsLicensed        : {IsLicensed:True}

UserPrincipalName : {UserPrincipalName*:[email protected]}
'@
PS C:\Users\saunders\Desktop\misc>
PS C:\Users\saunders\Desktop\misc> $newRecordTemplate = Get-Content .\recordTemplate.txt
PS C:\Users\saunders\Desktop\misc>
PS C:\Users\saunders\Desktop\misc> $newRecordTemplate
$recordTemplate = @'
UserPrincipalName : {UserPrincipalName*:[email protected]}
DisplayName       : {DisplayName:Lee Gu}
Title             : {Title:jr engineer}
UserType          : {UserType:Member}
IsLicensed        : {IsLicensed:True}

UserPrincipalName : {UserPrincipalName*:[email protected]}
'@
PS C:\Users\saunders\Desktop\misc>

上述模板

recordTemplate.txt
如何被读取为文本文件,用于处理作为带有ConvertFrom-String
ConvertFrom-StringData
模板

这样模板本身就可以从文件中读取,而不是直接输入到交互式 CLI 中。


正在解析的文件是

records.txt
,前两条记录是:

UserPrincipalName : [email protected]
DisplayName       : Lee Gu
Title             : jr engineer
UserType          : Member
IsLicensed        : True

UserPrincipalName : [email protected]
DisplayName       : Megan Bowen
Title             : recruiter
UserType          : Member
IsLicensed        : True

是的,这是

string
数据,并且,是的,希望利用
ConvertFrom-String
ConvertFrom-StringData
,但首先需要从文件中读取模板。我认为模板是一个here字符串

string powershell templates key-value text-processing
1个回答
0
投票

几个月前,我提到过 Expand-Csv,这是我作为练习而构建的一个非常简单的模板引擎。这是 Expand-Csv 的流程片段:

    Process {
       Import-Csv $driver | % {
           $_.psobject.properties | % {Set-variable -name $_.name -value $_.value}
           Get-Content $template | % {$ExecutionContext.InvokeCommand.ExpandString($_)} 
       }
    }

这一切都是为 csv 文件中的每个字段调用 Set-Variable,并为模板文件中的每一行调用 ExpandString。这两个工具可以完成所有繁重的工作。请注意,传递给 Set-Variable 的变量名称不包含初始美元符号。设置变量添加它。

© www.soinside.com 2019 - 2024. All rights reserved.