只有在索引号已知使用PowerShell时,才能更改一个单元格的值

我有一个保存电话号码的CSV文件。 根据使用的数字,这些数字的状态将是SPARE或USED。

每当我需要find可用的下一个SPARE编号时,我想运行powershell脚本find下一个SPARE编号,并将其分配给新用户(稍后执行),并将该特定编号的值更改为USED。

我已经设法findSPARE号码使用下面的脚本,但现在一旦find号码,我想改变该号码的状态为USED。

$LineUri = @() $Status = @() $csv = Import-Csv C:\Users\user\Desktop\PhoneData.csv -Delimiter "," |` ForEach-Object { $LineUri += $_.LineUri $Status += $_.Status } $currentStatus = "Spare" if ($Status -contains $currentStatus) { $Where = [array]::IndexOf($Status, $currentStatus) $AvailableURI = $LineUri[$Where] Write-Host "Next Uri Available: " $LineUri[$Where] $changeWhere = [array]::IndexOf($LineUri, $AvailableURI) } 

我的CSV文件如下所示:

 Name LineUri Status Test 1 3445660 Used Test 2 3445663 Used Test 3 3445664 Spare Test 4 3445665 Used Test 5 3445666 Spare 

一旦我运行上面的脚本,它将返回“3445664”作为备用号码。

现在我使用这个数字,我想把数字的状态(3445664)改为使用。

一旦更新,CSV将如下所示。

  Name LineUri Status Test 1 3445660 Used Test 2 3445663 Used Test 3 3445664 Used Test 4 3445665 Used Test 5 3445666 Spare 

有一个良好的PowerShell知识的人可以帮助我吗?

这将第一次出现Spare状态Used

 $csv = Import-Csv .\PhoneData.csv $csv | % { if ( $_.status -eq 'Spare' ) { $_.status -eq 'Used' ; break } } $csv | Export-Csv -Path .\PhoneDataNew.csv -NoTypeInformation 

如果你真的想使用索引:

 $i = 0 $csv = Import-Csv .\PhoneData.csv $csv | % { if ($_.status -eq 'Spare') { break } ; $i+=1 } echo $i > 2 $csv[$i] > Name LineUri Status > ---- ------- ------ > Test 3 3445664 Spare $csv[$i].Status = 'Used' $csv | Export-Csv -Path .\PhoneDataNew.csv -NoTypeInformation 

$csv = Import-Csv C:\Users\user\Desktop\PhoneData.csv -Delimiter ","已经为您提供了一个很好的CSV文件对象。 不需要先把它放在对象中。

代码beneith将读取CSV,然后查看每行,当状态为备用时,无论您想要更改,都可以更改为该行。 最后一行代码将csv导出到原始文件,其中-force参数确保它将被覆盖。

 $file = "C:\Users\user\Desktop\PhoneData.csv" $csv = Import-Csv $file -Delimiter "," foreach ($line in $CSV) { if ($line.Status -eq "Spare") { $line.Status = "Something else" $line.Name = "Something else" $line.LineUri = "Something else" } } $csv | Export-Csv $file -Delimiter "," -NoTypeInformation -Force