<# Script will grab asset info from InvGate and Extracted Invoice Details #> <# AssetStatus values: 2 - Active 8 - Loaner 9 - Stock 3 - Deleted #> $API_Secret = 'wmFuMl5mEOsn7drmv606vyCbN6c1Z6BIZYjVa5EfdPWRqzVJ4KVXkn28gbXf5KqUxTHZgQsnRnPfnYT88zOCyDu4VlZlIGRcE8jGMOGP5kuAowpVKeMl2JYK1JczCFW1' $API_ClientID = 'rk5ZnbKVRR0LtJw0BJovkHprkmAgghjSVPCJK4DC' $AssetMgrURI = "https://mpeengine.is.cloud.invgate.net:443/public-api" $Locations = '{"links":{"first":"https://mpeengine.is.cloud.invgate.net/public-api/locations/?access_token=zTlzGAHXwJL1BZsQPMlGHmRjb77ASN&page=1","last":"https://mpeengine.is.cloud.invgate.net/public-api/locations/?access_token=zTlzGAHXwJL1BZsQPMlGHmRjb77ASN&page=1","next":null,"prev":null},"data":[{"type":"Location","id":"24","attributes":{"name":"AWS","full_path":"Cloud > AWS","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":{"type":"Location","id":"23"}},"configuration_item":{"data":null}}},{"type":"Location","id":"25","attributes":{"name":"Azure","full_path":"Cloud > Azure","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":{"type":"Location","id":"23"}},"configuration_item":{"data":null}}},{"type":"Location","id":"28","attributes":{"name":"Calgary","full_path":"Calgary","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"23","attributes":{"name":"Cloud","full_path":"Cloud","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"32","attributes":{"name":"Edmonton","full_path":"Edmonton","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"36","attributes":{"name":"Grande Prairie","full_path":"Grande Prairie","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"27","attributes":{"name":"Lethbridge","full_path":"Lethbridge","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"47","attributes":{"name":"Lethbridge North","full_path":"Lethbridge North","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"53","attributes":{"name":"Medicine Hat","full_path":"Medicine Hat","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"51","attributes":{"name":"Red Deer","full_path":"Red Deer","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"48","attributes":{"name":"Regina","full_path":"Regina","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"50","attributes":{"name":"Saskatoon","full_path":"Saskatoon","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"49","attributes":{"name":"Saskatoon","full_path":"Saskatoon","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"54","attributes":{"name":"Vancouver","full_path":"Vancouver","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}},{"type":"Location","id":"52","attributes":{"name":"Winnipeg","full_path":"Winnipeg","description":null,"content_type":{"id":109}},"relationships":{"parent":{"data":null},"configuration_item":{"data":null}}}],"meta":{"pagination":{"page":1,"pages":1,"count":15}}}' | ConvertFrom-Json $locations_table = @() $assets = @() foreach ($location in $Locations.data) { $temp = [PSCustomObject]@{ ID = $location.id Name = $location.attributes.name } $locations_table += $temp } function Auth { param ( $API_Secret_Auth, $API_ClientID_Auth ) $auth_Header = @{ 'Content-Type' = "application/x-www-form-urlencoded" } $auth_Body = "grant_type=client_credentials&client_id=$API_ClientID_Auth&client_secret=$API_Secret_Auth" $AuthURI = 'https://mpeengine.is.cloud.invgate.net:443/oauth2/token/' $resp = Invoke-WebRequest $AuthURI -Method POST -Headers $auth_Header -Body $auth_Body return ($resp.Content | ConvertFrom-Json) } # Get bearer token if it doesn't exist or is expired. if (!($b_token) -or $b_token.expires_in -lt (get-Date)) { $b_token = Auth -API_Secret_Auth $API_Secret -API_ClientID_Auth $API_ClientID $b_token.expires_in = (Get-Date).AddSeconds($b_token.expires_in) # Change to date format. } $req_Headers = @{ Authorization = "Bearer " + $b_token.access_token 'Content-Type' = 'application/vnd.api+json' } # Find all active, Loaner, or Stock assets. $queryString = '?status_ids=2,8,9' $RequestURI = $AssetMgrURI + "/v2/assets-lite/" + $queryString $Response = Invoke-WebRequest -Uri $RequestURI -Headers $req_Headers do { $assets += ($Response.Content | ConvertFrom-Json).results $RequestURI = ($Response.Content | ConvertFrom-Json).next $Response = Invoke-WebRequest -Uri $RequestURI -Headers $req_Headers } while ($RequestURI) # Get Locations # $queryString = '?access_token=' + $b_token.access_token #V1 API's need token in the URL instead of header... # $RequestURI = $AssetMgrURI + "/locations/" + $queryString # $Response = Invoke-WebRequest -Uri $RequestURI -Headers $req_Headers foreach ($asset in $assets) { $matched = $locations_table | where ID -eq $asset.location $asset.location = $matched.Name } $ExportData = $assets | select id, name, serial, location, Manufacturer, model, "InvoiceNumber" $ExportData | Export-Csv .\AssetList.csv # Invoke-WebRequest -Uri $RequestURI -method GET -ContentType application/json