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

如何通过PowerShell获取F5虚拟服务器的Availability状态

如何通过PowerShell的F5-LTM模块获取虚拟服务器的可用性状态

我正在使用PowerShell的F5-LTM模块连接F5设备并采集数据,已成功获取虚拟服务器的Vip_Name、Vip_IP、Pool_Name、Node_Name、Node_IP等信息,但无法找到获取Availability(可用性)状态的参数。以下是我的完整代码,请问如何获取该状态数据?

$secpasswd = ConvertTo-SecureString "1234567890" -AsPlainText -Force

$MyLTM_IP = "12.18.10.8"
$mycreds = New-Object System.Management.Automation.PSCredential "User_Auto", $secpasswd
$session = $null

# 创建F5会话
$session = New-F5Session -LTMName $MyLTM_IP -LTMCredentials $mycreds -PassThru
"Vip_Name","Vip_IP","Pool_Name","Node_Name","Node_IP"
$vips = Get-VirtualServer -F5Session $session -Name "VS_224_PPR_50003"
$report = @()

foreach($vip in $vips) {
    $Vip_Name = $vip.Name
    $inputString = $vip.destination
    $vip_virtual_addr = $inputString -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}' | Out-Null 
    $vip_ip_addr = $matches[0]
    $vippool = $vip.pool        
    $vippool_name = $vippool.Name
    
    $get_pool_node = Get-PoolMember -F5Session $session -PoolName $vippool
    
    $firstNode = $true
    foreach($nods in $get_pool_node) {
        $Nodes_name = ($nods.name) -split ':' | Select-Object -First 1
        $Nodes_ip = $nods.Address
        
        if ($firstNode) {
            $report += [PSCustomObject]@{
                Vip_Name = $Vip_Name
                Vip_Status = "available"
                Vip_IP = $vip_ip_addr
                Pool_Name = $vippool_name
                Node_Name = $Nodes_name
                Node_IP = $Nodes_ip
            }
            $firstNode = $false
        } else {
            $report += [PSCustomObject]@{
                Vip_Name = ""
                Vip_Status = ""
                Vip_IP = ""
                Pool_Name = ""
                Node_Name = $Nodes_name
                Node_IP = $Nodes_ip
            }
        }
    }
}

$report | Export-Csv -Path "D:\vip_report.csv" -NoTypeInformation

解决方案

要获取虚拟服务器和节点的可用性状态,需要使用F5-LTM模块中专门的状态查询命令,以下是修改后的完整代码:

$secpasswd = ConvertTo-SecureString "1234567890" -AsPlainText -Force

$MyLTM_IP = "12.18.10.8"
$mycreds = New-Object System.Management.Automation.PSCredential "User_Auto", $secpasswd
$session = $null

# 创建F5会话
$session = New-F5Session -LTMName $MyLTM_IP -LTMCredentials $mycreds -PassThru

$vips = Get-VirtualServer -F5Session $session -Name "VS_224_PPR_50003"
$report = @()

foreach($vip in $vips) {
    $Vip_Name = $vip.Name
    # 更可靠的VIP IP提取方式:直接从destination对象的Address属性获取
    $vip_ip_addr = $vip.destination.Address
    $vippool = $vip.pool        
    $vippool_name = $vippool.Name

    # 获取虚拟服务器的可用性状态
    $vipStatus = Get-VirtualServerStatus -F5Session $session -VirtualServerName $Vip_Name
    $Vip_Availability = $vipStatus.AvailabilityStatus
    
    $get_pool_node = Get-PoolMember -F5Session $session -PoolName $vippool
    
    $firstNode = $true
    foreach($nods in $get_pool_node) {
        $Nodes_name = ($nods.name) -split ':' | Select-Object -First 1
        $Nodes_ip = $nods.Address
        # 获取节点的可用性状态
        $Node_Availability = $nods.AvailabilityStatus
        
        if ($firstNode) {
            $report += [PSCustomObject]@{
                Vip_Name = $Vip_Name
                Vip_Status = $Vip_Availability
                Vip_IP = $vip_ip_addr
                Pool_Name = $vippool_name
                Node_Name = $Nodes_name
                Node_IP = $Nodes_ip
                Node_Status = $Node_Availability
            }
            $firstNode = $false
        } else {
            $report += [PSCustomObject]@{
                Vip_Name = ""
                Vip_Status = ""
                Vip_IP = ""
                Pool_Name = ""
                Node_Name = $Nodes_name
                Node_IP = $Nodes_ip
                Node_Status = $Node_Availability
            }
        }
    }
}

$report | Export-Csv -Path "D:\vip_report.csv" -NoTypeInformation

关键修改说明

  • 使用Get-VirtualServerStatus命令查询虚拟服务器的状态,通过AvailabilityStatus属性获取其可用性(如available、unavailable等)
  • 从Get-PoolMember返回的对象中直接提取AvailabilityStatus属性,获取节点的可用性状态
  • 优化了VIP IP的提取逻辑,直接调用$vip.destination.Address,避免正则匹配的潜在问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:06:17