PSWMS.psm1
$latestSession = $null $latestAuth = $null ### ### General functions ### function CheckSession { if (($script:latestSession -eq $null) -or (((get-date) - $script:latestSession["Timestamp"]).TotalMinutes -gt 10)) { New-WmsApiSession } } function Close-ApiSession { ### ### https://developer.dell.com/apis/3788/versions/3.5/docs/Getting%20Started/3authentication.md ### $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/SessionService/Sessions/$($script:latestSession[""SessionId""])" $result = Invoke-WebRequest -Uri $uri -Method Delete -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} } function New-ApiSession { <# .SYNOPSIS Create a new authenticated session which can be used to call the WMS REST API. .DESCRIPTION It must be called all other functions. It returns the actual session object, but usually this object is not needed as the module caches and reuses the latest successful session. The validity of the credentials is checked and an error is thrown if not. .INPUTS This function does not take pipe input. .OUTPUTS The session object. .SOURCE https://developer.dell.com/apis/3788/versions/3.5/docs/Getting%20Started/3authentication.md #> param( [string]$Server, # The credentials used to authenticate. Use Get-Credential to create this object. [PSCredential]$Auth ) if (($Auth -eq $null) -and ($script:latestAuth -eq $null)) { Write-Host "Inital call to New-WmsApiSession not made !!! Must be called from main-script." exit } if ($Auth -eq $null) {$Auth = $script:latestAuth} if ($Server -eq "") {$Server = $script:latestSession["Host"]} $ApiUri = "https://$($Server):443/wms-api/wms/v1/SessionService/Sessions" $body= ConvertTo-Json(@{UserName = $Auth.UserName; Password = $Auth.GetNetworkCredential().Password}) $result = Invoke-WebRequest -Uri $ApiUri -Method Post -ContentType "application/json" -Body $body -Headers @{Accept = "*/*"} -ErrorAction SilentlyContinue if (($result -eq $null) -or (($result.StatusCode -ne 201) -and ($result.StatusCode -ne 204))) { Write-Error -Message "Session could not be opened" exit } $script:latestSession = @{Host = $Server; "X-Auth-Token" = $result.Headers["X-Auth-Token"]; SessionId = (ConvertFrom-JSON ($result.Content)).Id; Timestamp = Get-Date} $script:latestSession $script:latestAuth = $auth } ### ### Functions per device ### function Get-DetailsDevice { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/3get_device_details.md ### param ( [int] $deviceId ) CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/Systems/$deviceId" $result = Invoke-WebRequest -Uri $uri -Method Get -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Host "DeviceId not found !!" } return convertFrom-JSON ($result.content) } function Get-InstalledAppsDevice { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/9.8installedapplication.md ### param ( [int] $deviceId ) CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/$deviceId/apps" $result = Invoke-WebRequest -Uri $uri -Method Get -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "DeviceId not found !!" } convertFrom-Json ($result.Content) } function Get-LogfileDevice { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/8.7devicelogs.md ### param ( [int] $deviceId ) CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/Systems/$deviceId/Actions/Oem/DellWyse.DeviceLogs" $result = Invoke-WebRequest -Uri $uri -Method POST -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "DeviceId not found !!" } } function RestartDevice { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/8.4restartdevice.md ### param ( [int] $deviceId ) CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/Systems/$deviceId/Actions/Oem/DellWyse.Restart" $result = Invoke-WebRequest -Uri $uri -Method POST -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "DeviceId not found !!" } } function Send-MessageDevice { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/8.5sendmessagedevice.md ### param ( [int] $deviceID, [string]$Message ) $parameters = @{'@odata.id' = "/wms-api/wms/v1/Systems/1/Actions/Oem/SendMessageActionInfo" '@odata.type' = "#ActionInfo.v1_0_6.ActionInfo" 'Id' = "SendMessageActionInfo" 'Name' = "Dell Wyse Send Message Action Info" 'Parameters' = @(@{'Name' = "Message" 'Required' = $True 'DataType' = "String" 'AllowableValues' = @($Message) }) } CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/Systems/$deviceID/Actions/Oem/DellWyse.SendMessage" $body = ConvertTo-Json ($parameters) -Depth 5 $result = Invoke-WebRequest -Uri $Uri -Method POST -ContentType "application/json" -Body $body -Headers @{Accept = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "Session could not be opened" exit } } function Send-QueryDevice { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/8.6device_query.md ### param ( [int] $deviceId ) CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/Systems/$deviceId/Actions/Oem/DellWyse.DeviceQuery" $result = Invoke-WebRequest -Uri $uri -Method POST -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "DeviceId not found !!" } } function ShutdownDevice { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/8.3shutdown.md ### param ( [int] $deviceId ) CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/Systems/$deviceId/Actions/Oem/DellWyse.Shutdown" $result = Invoke-WebRequest -Uri $uri -Method POST -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "DeviceId not found !!" } } function UnregisterDevice { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/8.1unregister_device.md ### param ( [int] $deviceId, [bool]$forced = $false ) Write-Warning -Message "UnregisterDevice : This function does NOT work as documented in the API-documentation !!" CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/Systems/$deviceId/Actions/Oem/DellWyse.Unregister" $body = convertTo-Json (@{force = $forced}) $result = Invoke-WebRequest -Uri $uri -Method POST -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} ### -Body $body if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "DeviceId not found !!" } } ### ### Bulk functions ### function Get-DeviceInventoryDetails { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/2device_inventory.md ### param ( [string]$GroupFilter = "*", [string]$Serial = "", [string]$Filter = "" ) $devices = @() CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/Systems" if ($Serial -ne "") { $Filter = "Serial eq '$Serial'" } if ($Filter -ne "") { $Filter = "?`$filter=$Filter" } $result = Invoke-WebRequest -Uri "$uri$Filter" -Method Get -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} # -ErrorAction SilentlyContinue if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "No result returned !! Expired session ??" return $null } $content = ConvertFrom-JSON ($result.content) $devices += $content.Members $Filter = $Filter.Replace("?", "&") #### Filter is not the first parameter. First parameter = page while ($content."Members@odata.nextlink" -ne $null) { $uri = "https://$($script:latestSession[""Host""]):443/wms-api$($content."Members@odata.nextlink")$Filter" $result = Invoke-WebRequest -Uri $uri -Method Get -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "No result returned !! Expired session ??" return $null } $content = ConvertFrom-JSON ($result.content) $devices += $content.Members } return $devices | select @{Name='ID'; Expression={($_."@odata.id").split("/")[4]}}, @{Name='Oem'; Expression={$_.oem}} | where-object {$_.oem.Group -like "$GroupFilter"} } function Get-GroupInventoryDetails { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/9.6get_group_inventory.md ### param ( [string]$GroupFilter = "*" ) $groups = @() CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/DeviceGroups" $result = Invoke-WebRequest -Uri $uri -Method Get -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Host "Next page not found !! Expired session ??" } $content = ConvertFrom-JSON ($result.content) $groups += $content.Members while ($content."Members@odata.nextlink" -ne $null) { $uri = "https://$($script:latestSession[""Host""]):443/wms-api$($content."Members@odata.nextlink")" $result = Invoke-WebRequest -Uri $uri -Method Get -Headers @{"Accept" = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "Next page not found !! Expired session ??" } $content = ConvertFrom-JSON ($result.content) $groups += $content.Members } return ($groups | select @{Name='GroupName';Expression={$_.oem.Name}}, @{Name='GroupData';Expression={$_.oem}} | Where-Object {$_.GroupName -like "$GroupFilter"}) } function Send-MessageBulk { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/9.4send_message_bulk.md ### param ( [array]$Serials, [array]$MACAddresses, [string]$Message ) $parameters = @{'@odata.id' = "/wms-api/wms/v1/Actions/Oem/SendMessageActionInfo" '@odata.type' = "#ActionInfo.v1_0_6.ActionInfo" 'Id' = "SendMessageActionInfo" 'Name' = "Dell Wyse Send Message Action Info" 'Parameters' = @() } if ($Serials -ne $null) { $parameter = @{'Name' = "SerialNumber" 'Required' = $True 'DataType' = "String" 'AllowableValues' = @() } ForEach ($serial in $serials) { $parameter.AllowableValues += $Serial } $parameters.Parameters += $parameter } if ($MACAddresses -ne $null) { $parameter = @{'Name' = "MACAddress" 'Required' = $True 'DataType' = "String" 'AllowableValues' = @() } ForEach ($mac in $MACAddresses) { $parameter.AllowableValues += $mac } $parameters.Parameters += $parameter } ### The Message $parameter = @{'Name' = "Message" 'Required' = $True 'DataType' = "String" 'AllowableValues' = @($Message) } $parameters.Parameters += $parameter CheckSession $uri = "https://$($script:latestSession[""Host""]):443/wms-api/wms/v1/Actions/Oem/DellWyse.SendMessage" $body = ConvertTo-Json ($parameters) -Depth 5 $result = Invoke-WebRequest -Uri $Uri -Method Post -ContentType "application/json" -Body $body -Headers @{Accept = "*/*"; "X-Auth-Token" = $script:latestSession["X-Auth-Token"]} if (($result -eq $null) -or ($result.StatusCode -ne 200)) { Write-Error -Message "Session could not be opened" exit } } ### ### TODO : Functions to build ### function Get-LicenseInfo { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/7license_monitoring.md ### } function Set-GroupDevice { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/8.0change_device_group.md ### } function FactoryResetDevice { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/8.2factory_reset.md ### } function Set-GroupBulk { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/9.0change_group_bulk.md ### } function UnregisterBulk { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/9.1unregister_bulk_devices.md ### } function RestartBulk { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/9.2restart_bulk_devices.md ### } function ShutdownBulk { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/9.3shutdown_bulk_devices.md ### } function FactoryResetBulk { ### ### https://developer.dell.com/apis/3788/versions/4.3.0/docs/Tasks/9.5factoryreset_bulk.md ### } |