0

我正在读取一个包含 25,000 条记录的 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

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

4

1 回答 1

1

假设你的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到代码中。

希望有帮助

于 2018-12-18T16:47:53.927 回答