非常简洁地将此处的字符串写入文件:
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字符串。
几个月前,我提到过 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 的变量名称不包含初始美元符号。设置变量添加它。