You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 
}

运行说明

  1. 脚本启动后自动读取本地CSV文件中的ID-IP映射关系
  2. 输入ID即可校验是否存在,存在则直接走后续业务逻辑,不存在则提示是否新增
  3. 新增录入时会先校验IP格式,再展示录入信息供确认,有误可选择重新输入IP或修改ID
  4. 录入完成后自动回到ID输入界面,可继续录入新数据,输入Q即可退出脚本,退出前自动保存所有修改到CSV文件

内容的提问来源于stack exchange,提问作者user12428212

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:45:03