仅当使用 powershell 知道索引号时才更改一个单元格的值
Change Value of one cell only if Index number is known using powershell
我有一个包含电话号码的 CSV 文件。根据号码的使用情况,号码的状态将是 SPARE 或 USED。
每当我需要找到下一个可以使用的备用号码时,我想 运行 找到下一个备用号码的 powershell 脚本并将其分配给新用户(稍后实现)并更改该特定数字的值已使用。
我已经设法使用下面的脚本找到了 SPARE 号码,但现在一旦找到该号码,我想将该号码的状态更改为 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
一旦我运行上面的脚本,它returns“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 文件对象。无需先将其放入对象中。
下面的代码将读取 CSV,然后查看每一行,当 Status 为 Spare 时,您可以根据需要更改该行。最后一行代码将 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
我有一个包含电话号码的 CSV 文件。根据号码的使用情况,号码的状态将是 SPARE 或 USED。
每当我需要找到下一个可以使用的备用号码时,我想 运行 找到下一个备用号码的 powershell 脚本并将其分配给新用户(稍后实现)并更改该特定数字的值已使用。
我已经设法使用下面的脚本找到了 SPARE 号码,但现在一旦找到该号码,我想将该号码的状态更改为 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
一旦我运行上面的脚本,它returns“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 文件对象。无需先将其放入对象中。
下面的代码将读取 CSV,然后查看每一行,当 Status 为 Spare 时,您可以根据需要更改该行。最后一行代码将 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