[英]How do i overwrite a field in a csv file with PowerShell?
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.