PowerShell脚本添加双层循环实现ID确认与重复录入功能
修改后的PowerShell ID-IP映射管理脚本
新增功能说明
- 信息确认循环:用户输入ID、IP后展示录入内容供校验,信息有误可直接返回重新录入
- 录入完成自动回到初始ID输入环节,无需重启脚本即可持续录入多条数据
- 原有功能全部保留:支持ID存在校验、IP格式校验、CSV文件自动更新
#### START SCRIPT ##### Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll" $dbfile = "C:\test.csv" $db = [System.Collections.Generic.List[object]]::new() if (Test-Path -Path $dbfile -PathType Leaf) { $db.AddRange((Import-Csv -Path $dbfile)) } $dbUpdated = $false while ($true) { # 重置输入变量,避免上一次录入的内容干扰 $inputID = $null $IP = $null # ID输入校验 While ( ($Null -eq $inputID) -or ($inputID -eq '') ) { $inputID = Read-Host -Prompt "请输入ID,输入'Q'退出程序" } if ($inputID.ToLower() -eq 'q') { break } $entry = $db | Where-Object { $_.HostName -eq $inputID } if ($entry) { Write-Host "$inputID 已存在!" -ForegroundColor Green # 此处可追加ID存在时要执行的后续业务逻辑 continue } Write-Host "$inputID 不存在于数据库中!" -ForegroundColor Red # 询问是否新增ID $title = '是否新增ID?' $question = '您确定要将新ID录入数据库吗?' $choices = '&是', '&否' $decision = $Host.UI.PromptForChoice($title, $question, $choices, 1) if ($decision -ne 0) { continue } # 新增信息确认循环:录入内容校验 $infoConfirm = $false do { # IP格式校验 do { $IP = Read-Host -Prompt "请输入对应ID $inputID 的IP地址" } while (![IPAddress]::TryParse($IP, [ref]$null)) # 展示录入内容供用户确认 Write-Host "`n您录入的信息如下:" Write-Host "ID:$inputID" Write-Host "IP:$IP`n" $confirmTitle = '信息确认' $confirmQuestion = '以上信息是否正确?选择否将重新录入' $confirmChoices = '&是', '&否' $confirmDecision = $Host.UI.PromptForChoice($confirmTitle, $confirmQuestion, $confirmChoices, 0) if ($confirmDecision -eq 0) { $infoConfirm = $true } else { # 确认信息错误,询问是否需要修改ID $changeIdTitle = '修改ID?' $changeIdQuestion = '是否需要修改ID?选择否将仅重新输入IP' $changeIdChoices = '&是', '&否' $changeIdDecision = $Host.UI.PromptForChoice($changeIdTitle, $changeIdQuestion, $changeIdChoices, 1) if ($changeIdDecision -eq 0) { # 需要修改ID的话直接跳出当前确认循环,回到最外层ID输入环节 $infoConfirm = $true $inputID = $null } } } while (-not $infoConfirm) # 用户确认信息正确且不需要修改ID的情况下写入数据库 if ($null -ne $inputID -and $null -ne $IP) { $db.Add([PsCustomObject]@{ HostName = $inputID; IP = $IP }) Write-Host "数据:$inputID,$IP 已成功录入数据库!`n" -ForegroundColor Green $dbUpdated = $true } } # 脚本退出前保存更新后的CSV文件 if ($dbUpdated) { $db | Export-Csv -Path $dbfile -NoTypeInformation -Force $dbTrimmer = Get-Content $dbfile $dbTrimmer.Replace('","', ",").TrimStart('"').TrimEnd('"') | Set-Content -Path $dbfile -Force -Confirm:$false }
运行说明
- 脚本启动后自动读取本地CSV文件中的ID-IP映射关系
- 输入ID即可校验是否存在,存在则直接走后续业务逻辑,不存在则提示是否新增
- 新增录入时会先校验IP格式,再展示录入信息供确认,有误可选择重新输入IP或修改ID
- 录入完成后自动回到ID输入界面,可继续录入新数据,输入Q即可退出脚本,退出前自动保存所有修改到CSV文件
内容的提问来源于stack exchange,提问作者user12428212
相关产品推荐
相关产品推荐

