基于扁平文件创建以VirtualServer为名称的PowerShell对象
从扁平文本创建PowerShell VirtualServer对象
我来帮你搞定这个需求!针对你提到的Destination字段必存在,Pool/Node字段可能缺失或有多个实例的情况,我们可以通过PowerShell脚本把扁平文本转换成结构化的对象数组,每个对象对应一个VirtualServer。
步骤说明
- 拆分文本条目:把整个文本按
VirtualServer=分割,得到每个VirtualServer的独立条目 - 提取键值对:用正则匹配每个条目中的
Key=Value格式内容,处理多实例的Pool/Node字段 - 构建对象:把提取的属性整理成PSCustomObject,最终得到结构化的对象数组
完整脚本示例
# 替换成你的扁平文本内容,或者用 Get-Content .\your-flat-file.txt -Raw 读取文件 $flatText = @" VirtualServer=_1095cservicecenter.yip.com_redirect_vs Destination=10.10.67.211%104:80 VirtualServer=aarp.yip.com_443_vs Destination=10.10.70.63%107:443 Pool=aarp.yip.com_443_Pool Node=trciis-na1-03-30(10.10.12.30%107) VirtualServer=aarp.yip.com_redirect_vs Destination=10.10.70.63%107:80 Pool=pool1 Node=node1(1.1.1.1) Pool=pool2 Node=node2(2.2.2.2) "@ # 分割文本为单个VirtualServer条目,过滤空内容 $vsEntries = $flatText -split 'VirtualServer=' | Where-Object { $_ -match '\S' } # 初始化结果数组 $virtualServers = @() foreach ($entry in $vsEntries) { # 提取VirtualServer名称(第一个空格前的内容) $vsName = ($entry -split '\s')[0].Trim() # 匹配所有Key=Value格式的键值对 $keyValuePairs = [regex]::Matches($entry, '(\w+)=([^\s]+)') # 有序字典保证属性顺序和输入一致 $vsProps = [ordered]@{ VirtualServer = $vsName Destination = $null Pool = @() # 初始化为数组,处理多实例 Node = @() # 初始化为数组,处理多实例 } foreach ($kvp in $keyValuePairs) { $key = $kvp.Groups[1].Value $value = $kvp.Groups[2].Value switch ($key) { 'Destination' { $vsProps[$key] = $value } 'Pool' { $vsProps[$key] += $value } # 追加到数组 'Node' { $vsProps[$key] += $value } # 追加到数组 } } # 转换为PowerShell对象并添加到结果 $virtualServers += [PSCustomObject]$vsProps } # 输出结果,也可以导出为CSV:$virtualServers | Export-Csv .\virtual-servers.csv -NoTypeInformation $virtualServers
脚本关键点
- 文件读取:如果你的内容在文件里,把
$flatText替换成Get-Content .\your-file.txt -Raw,-Raw参数会把整个文件作为单个字符串,方便分割 - 多实例处理:Pool和Node字段初始化为数组,遇到多个条目会自动追加,最终每个对象的Pool/Node属性会是数组类型(如果只有一个实例,就是单元素数组)
- 属性顺序:用
[ordered]字典保证输出的对象属性顺序和输入文本一致,更符合阅读习惯
运行脚本后,你会得到一个结构化的对象数组,可以直接查看、筛选或者导出为CSV等格式。
内容的提问来源于stack exchange,提问作者Paul Dawson
相关产品推荐
相关产品推荐

