Reputation: 63
Hi I am trying to select a particular string from a Json which will provide me the server is healthy or Unhealthy. My PowerShell script is giving blank status which is not expected
Here's JSON file content:
{
"AutoScalingGroups": [
{
"AutoScalingGroupARN": "arn:aws:autoscaling:eu-west-1:123456789012:autoScalingGroup:bd627251-3d9c-4f2e-8a67-a66d6ae8cd74:autoScalingGroupName/abc-autoscaling20201215202342164100000001",
"ServiceLinkedRoleARN": "arn:aws:iam::123456789012:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling",
"TargetGroupARNs": [
"arn:aws:elasticloadbalancing:eu-west-1:123456789012:targetgroup/target-group/e89a8e04bc11e7bb"
],
"SuspendedProcesses": [],
"DesiredCapacity": 1,
"Tags": [
{
"ResourceType": "auto-scaling-group",
"ResourceId": "abc-autoscaling20201215202342164100000001",
"PropagateAtLaunch": true,
"Value": "sit",
"Key": "BranchName"
},
{
"ResourceType": "auto-scaling-group",
"ResourceId": "abc-autoscaling20201215202342164100000001",
"PropagateAtLaunch": true,
"Value": "abc-autoscaling",
"Key": "Name"
},
{
"ResourceType": "auto-scaling-group",
"ResourceId": "abc-autoscaling20201215202342164100000001",
"PropagateAtLaunch": true,
"Value": "manish",
"Key": "Owner"
},
{
"ResourceType": "auto-scaling-group",
"ResourceId": "abc-autoscaling20201215202342164100000001",
"PropagateAtLaunch": true,
"Value": "online",
"Key": "role"
},
{
"ResourceType": "auto-scaling-group",
"ResourceId": "abc-autoscaling20201215202342164100000001",
"PropagateAtLaunch": true,
"Value": "Online-Group",
"Key": "team"
}
],
"EnabledMetrics": [
{
"Metric": "GroupInServiceInstances",
"Granularity": "1Minute"
},
{
"Metric": "GroupStandbyInstances",
"Granularity": "1Minute"
},
{
"Metric": "GroupMinSize",
"Granularity": "1Minute"
},
{
"Metric": "GroupDesiredCapacity",
"Granularity": "1Minute"
},
{
"Metric": "GroupMaxSize",
"Granularity": "1Minute"
},
{
"Metric": "GroupPendingInstances",
"Granularity": "1Minute"
},
{
"Metric": "GroupTerminatingInstances",
"Granularity": "1Minute"
},
{
"Metric": "GroupTotalInstances",
"Granularity": "1Minute"
}
],
"LoadBalancerNames": [],
"AutoScalingGroupName": "abc-autoscaling20201215202342164100000001",
"DefaultCooldown": 300,
"MinSize": 1,
"Instances": [
{
"ProtectedFromScaleIn": false,
"AvailabilityZone": "eu-west-1b",
"InstanceId": "i-0b180f050533a6067",
"HealthStatus": "Healthy",
"LifecycleState": "InService",
"LaunchConfigurationName": "abc-autoscaling20201215202342164100000001",
"InstanceType": "t3.large"
}
],
"MaxSize": 1,
"VPCZoneIdentifier": "subnet-a57b84fe,subnet-2c00b865",
"HealthCheckGracePeriod": 1800,
"TerminationPolicies": [
"Default"
],
"LaunchConfigurationName": "abc-autoscaling20201215202342164100000001",
"CreatedTime": "2020-12-15T20:23:42.952Z",
"AvailabilityZones": [
"eu-west-1b",
"eu-west-1a"
],
"HealthCheckType": "ELB",
"NewInstancesProtectedFromScaleIn": false
}
]
}
I am running the below command to fetch but not able to get the desired output
$abc = Get-Content C:\temp\healthcheck.json | Select AutoScalingGroups.Instances.HealthStatus
Expected Output:
HealthStatus : Healthy
Output I got:
AutoScalingGroups.Instances.HealthStatus
----------------------------------------
Can anyone help me in this.
Upvotes: 2
Views: 1153
Reputation: 55
This should work:
$abc = Get-Content C:\temp\healthcheck.json | ConvertFrom-Json
$abc.AutoScalingGroups.Instances.HealthStatus
This will give the output as:
Healthy
Upvotes: 1
Reputation: 5227
You need to convert it from JSON to PowerShell object first:
$abc = Get-Content C:\temp\healthcheck.json | ConvertFrom-Json |
Select-Object @{n='HealthStatus';e={$_.AutoScalingGroups.Instances.HealthStatus}}
Upvotes: 2