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

基于扁平文件创建以VirtualServer为名称的PowerShell对象

从扁平文本创建PowerShell VirtualServer对象

我来帮你搞定这个需求!针对你提到的Destination字段必存在,Pool/Node字段可能缺失或有多个实例的情况,我们可以通过PowerShell脚本把扁平文本转换成结构化的对象数组,每个对象对应一个VirtualServer。

步骤说明

  1. 拆分文本条目:把整个文本按VirtualServer=分割,得到每个VirtualServer的独立条目
  2. 提取键值对:用正则匹配每个条目中的Key=Value格式内容,处理多实例的Pool/Node字段
  3. 构建对象:把提取的属性整理成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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:09:36