修改数组中的列



我正在读取一个包含25000条记录的CSV文件,并将每一列读取到psobject中。以下是我目前所拥有的:

$file = Import-CSV .server.csv
$tempobj = New-Object psobject -Property @{
'Name' = $file.Name
'Group' = $file.Group
}

当运行此操作时,我得到了我想要的正确结果,即$file.Name包含所有服务器名称,$file.Group包含服务器的组。但是,我的问题是,我需要在不干扰.Group的情况下编辑每个服务器的名称。下面是一个服务器名称的原样示例

WindowsAuthServer@{wdk9870WIN}

我需要从每个服务器名称中删除WindowsAuthServer @{WIN},只保留服务器名称,或者在本例中为wdk9870

我尝试使用-replace函数($tempobj.Name -replace "WindowsAuthServer @{",""(,但它要求我将结果保存到一个新的数组中,然后这个数组会弄乱或完全删除.Group

有什么不同的方法可以做到这一点吗?我迷路了。

假设您的server.csv如下所示:

"Name","Group"
"WindowsAuthServer @{wdk9870WIN}","Group1"
"WindowsAuthServer @{wdk9880WIN}","Group2"
"WindowsAuthServer @{wdk9890WIN}","Group1"
"WindowsAuthServer @{wdk9900WIN}","Group1"

如果您只想更改Name列中的值,那么类似这样的操作可能会完成:

Import-Csv .server.csv | ForEach-Object {
New-Object psobject -Property @{
'Name' = ([regex]'@{(w+)WIN}').Match($_.Name).Groups[1].Value
'Group' = $_.Group
}
}

这将输出:

Name    Group 
----    ----- 
wdk9870 Group1
wdk9880 Group2
wdk9890 Group1
wdk9900 Group1

如果需要,只需将此信息通过管道发送到Export-Csvcmdlet,即可另存为新的CSV文件。为此,只需将| Export-Csv -Path .server_updated.csv -NoTypeInformation附加到代码中即可。

希望能帮助

相关内容

  • 没有找到相关文章

最新更新