簡體   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