PowerShell如何实现用户输入匹配数组项并输出站点设备配置
PowerShell 网络设备配置生成脚本实现
你现有代码可以按照以下逻辑补全,同时修正原有语法问题:
- 修复
$switches数组的语法错误:原数组中"CD002-SW1,"误将逗号写在引号内部,会导致字符串内容错误 - 统一文件存储路径,避免原代码中提示路径与实际写入路径不一致的问题
- 基于设备命名规则(
站点ID-设备名)做前缀匹配,精准筛选对应站点的所有设备 - 遍历匹配到的设备逐台生成配置片段,追加到目标文件
- 初始化阶段清空同名旧文件,避免历史配置残留
完整可运行代码
# 固定配置存储路径 $savePath = "C:\Temp\" # 全量设备列表,后续新增站点设备直接往数组里追加字符串即可 $switches = @("AB001-SW1", "AB001-SW2", "CD002-SW1", "CD002-SW2", "EF003-SW1", "EF003-SW2") # 获取用户输入的保存文件名 $fileName = Read-Host "Please enter the file name to be saved. Location of file: $savePath" $fullSavePath = Join-Path $savePath "$fileName.txt" # 存在同名旧文件则提前删除 if (Test-Path $fullSavePath) { Remove-Item $fullSavePath -Force } # 获取用户输入的站点标识符 $siteId = Read-Host "Please enter the site identifier (ex: AB001)" # 筛选所有属于输入站点的设备:匹配设备名以「站点ID-」开头的项 $matchedDevices = $switches | Where-Object { $_ -like "$siteId-*" } if (-not $matchedDevices) { Write-Host "This site doesn't exist" -ForegroundColor Red } else { Write-Host "This site exists, matched devices: $($matchedDevices -join ', ')" -ForegroundColor Green # 逐台遍历匹配到的设备,生成对应配置 foreach ($device in $matchedDevices) { # 单台设备的配置片段集合,新增配置直接往数组里加行即可 $configSegments = @( "set system radius-server x.x.x.x source-address $device" "set system radius-server x.x.x.x secret xyz" "set system radius-server x.x.x.x timeout 5" "set system radius-server x.x.x.x retry 3" "set system radius-server x.x.x.x port 1812" ) # 配置写入文件,追加模式 $configSegments | Out-File -FilePath $fullSavePath -Append # 不同设备配置之间加空行分隔,提升可读性 "" | Out-File -FilePath $fullSavePath -Append } Write-Host "You can find your file under $fullSavePath" -ForegroundColor Green } Read-Host "Please press enter to exit!!"
关键逻辑说明
- 站点匹配用
-like "$siteId-*"做前缀判断,加了-分隔符可以避免误匹配,比如输入AB00不会误匹配到AB001站点的设备 - 单台设备的配置统一存在数组里,不需要为每一行配置单独定义变量,代码更简洁易维护
- 如果后续需要给特定设备加专属配置,直接在
foreach循环内加判断即可,例如判断设备名包含SW1时写入核心交换机专属配置 - 用
Join-Path拼接文件路径,避免手动拼接字符串出现斜杠多写、漏写的问题
内容的提问来源于stack exchange,提问作者codenoob
相关产品推荐
相关产品推荐

