gpt4 book ai didi

arrays - 将字符串转换为 PSCustomObjects 数组

转载 作者:行者123 更新时间:2023-12-03 08:26:45 25 4
gpt4 key购买 nike

我正在寻找一种智能方法将以下字符串转换为 PSCustomObjects 数组:

Name        : AdtAgent
DisplayName : Microsoft Monitoring Agent Audit Forwarding
Status : Stopped
StartType : Disabled

Name : AeLookupSvc
DisplayName : Application Experience
Status : Running
StartType : Automatic

任何想法都值得采纳!!

最佳答案

我注意到分隔文本 block 的空行并不是真正的空,而是包含一个空格字符。

实现此目的的一种方法是使用 ConvertFrom-StringData:

$str = @"
Name : AdtAgent
DisplayName : Microsoft Monitoring Agent Audit Forwarding
Status : Stopped
StartType : Disabled

Name : AeLookupSvc
DisplayName : Application Experience
Status : Running
StartType : Automatic
"@

$result = $str -split '\r?\n\s*\r?\n' | ForEach-Object {
# for PowerShell 7 you can use
# $_ | ConvertFrom-StringData -Delimiter ':'
[PsCustomObject](($_ -replace ':', '=') | ConvertFrom-StringData)
}

$result

输出:

Status  DisplayName                                 StartType Name       
------ ----------- --------- ----
Stopped Microsoft Monitoring Agent Audit Forwarding Disabled AdtAgent
Running Application Experience Automatic AeLookupSvc

但是,如果重要的话,这不会保留属性的顺序,而且,如果您的值可能包含“:”字符,这可能会给您带来不好的结果。

当然,您可以像这样“手动”执行此操作,保持顺序,并且如果值具有冒号字符,则不会感到困惑:

$result = $str -split '\r?\n\s*\r?\n' | ForEach-Object {
$hash = [ordered]@{}
foreach ($line in ($_ -split '\r?\n')) {
$name, $value = ($line -split ':', 2).Trim()
$hash[$name] = $value
}
# cast to PsCustomObject for output
[PsCustomObject]$hash
}

$result

输出:

Name        DisplayName                                 Status  StartType
---- ----------- ------ ---------
AdtAgent Microsoft Monitoring Agent Audit Forwarding Stopped Disabled
AeLookupSvc Application Experience Running Automatic

关于arrays - 将字符串转换为 PSCustomObjects 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66437395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com