如何通过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
相关产品推荐
相关产品推荐

