繁体   English   中英

如何用 PowerShell 覆盖 csv 文件中的字段?

[英]How do i overwrite a field in a csv file with PowerShell?

CSV 样品:

CSV 样本

我有以下代码,我想在其中覆盖 PreviousGroup 字段中的当前值。 我知道-append添加到列的末尾,但这不是我想要做的。

$UserGroup = read-host "Enter Group Name"
$csvFile = Import-Csv "C:\HomeFolder\Locations.csv"
if ([string]::IsNullOrEmpty($PreviousGroup)) {$PreviousGroup = ""}
else {$PreviousGroup = $csvFile | Select-Object $csvFile.PreviousGroup -Verbose}

$csvFile.PreviousGroup = $UserGroup
$csvFile | Export-Csv

其次,是否可以将以下代码中的 Dom*_Groups 链接到 CSV 上的列表?

param([Parameter(Mandatory = $false)]
        [ValidateSet(*"list from csv"*)] [string]$Dom1_Groups)
param([Parameter(Mandatory = $false)]
        [ValidateSet(*"list from csv"*)] [string]$Dom2_Groups)

Import-Csv返回的$csvFile[pscustomobject]实例的数组

因此,分配$csvFile.PreviousGroup属性以尝试分配给其元素的.PreviousGroup属性将不起作用:虽然尝试这样做是可以理解的,因为通过成员枚举以这种方式获取元素的属性值确实有效,成员枚举设计仅适用于获取不适用于设置属性值。

最简单的解决方案是使用.ForEach()数组方法

# Set the .PreviousGroup property of all elements of array $csvFile
# to the value of $UserGroup.
$csvFile.ForEach('PreviousGroup', $UserGroup)

警告:从 PowerShell 7.1 开始,如果输入 object 恰好是标量(单个对象),则上述分配属性值的方法意外失败,如果 ZCC8D68C551C4A9A6D5313E0DEZ 文件恰好包含一个数据行文件,则可能发生这种情况请参阅GitHub 问题 #14527
一种低效的解决方法是使用数组子表达式运算符@()
@($csvFile).ForEach('PreviousGroup', $UserGroup)
或使用脚本块{... } ):
$csvFile.ForEach({ $_.PreviousGroup = $UserGroup })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM