只有在索引号已知使用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