-
Notifications
You must be signed in to change notification settings - Fork 49
/
Find-NonPowerPolicyCapableDevices.ps1
143 lines (131 loc) · 6.64 KB
/
Find-NonPowerPolicyCapableDevices.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<#
_author_ = Ashish Singh <ashish_singh11@Dell.com>
Copyright (c) 2018 Dell EMC Corporation
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
#>
<#
.SYNOPSIS
Script to get the list of devices which are not capable of power policy capping with OMEnt-Power Manager
.DESCRIPTION
This script exercises the OME REST API to get a list of devices which are
not capable of power monitoring with OMEnt-Power Manager
currently being managed by that instance. For authentication X-Auth
is used over Basic Authentication
Note :
1)The credentials entered are not stored to disk.
2)This script doesn't take into account devices with iDRAC Firmware version 4.0.0.0
.PARAMETER IpAddress
This is the IP address of the OME Appliance
.PARAMETER Credentials
Credentials used to talk to the OME Appliance
Credentials used to talk to the OME Appliance
.EXAMPLE
$cred = Get-Credential
.\Find-NonPowerPolicyCapableDevices.ps1 -IpAddress "10.xx.xx.xx" -Credentials $cred
.EXAMPLE
.\Find-NonPowerPolicyCapableDevices.ps1 -IpAddress "10.xx.xx.xx"
In this instance you will be prompted for credentials to use
.EXAMPLE
To save the device Ids to a file(file_name.txt) give the command in following format
.\Find-NonPowerPolicyCapableDevices.ps1 -IpAddress "10.xx.xx.xx" -Credentials $cred >file_name.txt
#>
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[System.Net.IPAddress] $IpAddress,
[Parameter(Mandatory)]
[pscredential] $Credentials
)
function Set-CertPolicy() {
## Trust all certs - for sample usage only
Try {
add-type @"
using System.Net;
using System.Security.Cryptography.X509Certificates;
public class TrustAllCertsPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint, X509Certificate certificate,
WebRequest request, int certificateProblem) {
return true;
}
}
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
}
catch {
Write-Error "Unable to add type for cert policy"
}
}
Try {
Write-Host 'The Power Manager scripts were originally internal Dell scripts we then published externally. If you see this message and are using one of these scripts it would be very helpful if you open an issue on GitHub at https://github.com/dell/OpenManage-Enterprise/issues and tell us you are using the script. We have not dedicated any resources to optimizing them but are happy to do so if we know the community is using them. Likewise if you find a bug in one of these scripts feel free to open an issue and we will investigate.'
Set-CertPolicy
$SessionUrl = "https://$($IpAddress)/api/SessionService/Sessions"
$BaseUri = "https://$($IpAddress)"
$DeviceCountUrl = $BaseUri + "/api/DeviceService/Devices"
$NextLinkUrl = $null
$Type = "application/json"
$UserName = $Credentials.username
$Password = $Credentials.GetNetworkCredential().password
$UserDetails = @{"UserName" = $UserName; "Password" = $Password; "SessionType" = "API" } | ConvertTo-Json
$Headers = @{}
$SessResponse = Invoke-WebRequest -Uri $SessionUrl -Method Post -Body $UserDetails -ContentType $Type
if ($SessResponse.StatusCode -eq 200 -or $SessResponse.StatusCode -eq 201) {
## Successfully created a session - extract the auth token from the response
## header and update our headers for subsequent requests
$Headers."X-Auth-Token" = $SessResponse.Headers["X-Auth-Token"]
$DeviceData = @()
$Total = @()
$DevCountResp = Invoke-WebRequest -Uri $DeviceCountUrl -Method Get -Headers $Headers -ContentType $Type
if ($DevCountResp.StatusCode -eq 200) {
$DeviceCountData = $DevCountResp.Content | ConvertFrom-Json
$DeviceData += $DeviceCountData.'value'
$Total = $DeviceCountData.'@odata.count'
$toskip = 50
$NextLinkUrl = $DeviceCountUrl + "?`$skip=$($toskip)&`$top=$($Total)"
$NextLinkResponse = Invoke-WebRequest -Uri $NextLinkUrl -Method Get -Headers $Headers -ContentType $Type
if ($NextLinkResponse.StatusCode -eq 200) {
$NextLinkData = $NextLinkResponse.Content | ConvertFrom-Json
$DeviceData += $NextLinkData.'value'
}
else {
Write-Warning "Unable to fetch nextlink data"
}
for ($i = 0; $i -ne $Total ; $i++) {
$capability = $DeviceData[$i].DeviceCapabilities
<#if device type is chassis, check only for power capping bit 1105#>
if ($DeviceData[$i].'Type' -eq 2000) {
if ($capability -notcontains 1105 ) {
<#print Id of the devices which aren't power policy capping capable#>
$DeviceData[$i].'Id' | Format-List
}
}
else {
<#if device type is server, check for both power monitoring bit 1006 and power capping bit 1105#>
if ($capability -notcontains 1105 -or $capability -notcontains 1006 ) {
<#print Id of the devices which aren't power policy capping capable#>
$DeviceData[$i].'Id' | Format-List
}
}
}
}
else {
Write-Error "Unable to get count of managed devices .. Exiting"
}
}
else {
Write-Error "Unable to create a session with appliance $($IpAddress)"
}
Write-Host 'The Power Manager scripts were originally internal Dell scripts we then published externally. If you see this message and are using one of these scripts it would be very helpful if you open an issue on GitHub at https://github.com/dell/OpenManage-Enterprise/issues and tell us you are using the script. We have not dedicated any resources to optimizing them but are happy to do so if we know the community is using them. Likewise if you find a bug in one of these scripts feel free to open an issue and we will investigate.'
}
catch {
Write-Error "Exception occured - $($_.Exception.Message)"
}