$user = "xx" $pass = "xx" $uri = "https://xx.yy.zz.com/otrs/nph-genericinterface.pl/Webservice" $headers = @{} $headers.Add("Accept", "application/json") $headers.Add("Content-Type", "application/json") # Get Session $LoginDetails = @{ UserLogin = $user Password = $pass } $json = $LoginDetails | ConvertTo-Json $response = Invoke-RestMethod -Method Post -Headers $Headers -ContentType 'application/json' -Uri "$uri/CMDB/Session" -Body $json if ( $response.Error ) { $code = $response.Error.ErrorCode $message = $response.Error.ErrorMessage Write-Host "Creating session failed (${code}: $message)" exit 1 } $SessionID = $response.SessionID $Today = Get-Date -Format "yyyy-MM-dd" # Which classes to check $Classes = @("Computer") foreach ( $Class in $Classes ) { Write-Host Search for ConfigItems of class $Class # Search ConfigItems # Parameter see https://github.com/OTRS/ITSMConfigurationManagement/blob/rel-6_0/Kernel/GenericInterface/Operation/ConfigItem/ConfigItemSearch.pm#L125 $SearchParameter = @{ SessionID = $SessionID ConfigItem = @{ Class = $Class Limit = 10000 DeplStates = @( "Production" ) } } $json = $SearchParameter | ConvertTo-Json -Depth 3 $response = Invoke-RestMethod -Method Post -Headers $Headers -Uri "$uri/CMDB/ConfigItem" -Body $json if ( $response.Error ) { $code = $response.Error.ErrorCode $message = $response.Error.ErrorMessage Write-Host "Search for ConfigItems failed (${code}: $message)" exit 1 } # next iteration of no CIs found if ( !$response.ConfigItemIDs ) { continue } $ConfigItemIDs = $response.ConfigItemIDs foreach ( $ConfigItemID in $ConfigItemIDs) { Write-Host Fetching ConfigItem with ID $ConfigItemID $response = Invoke-RestMethod -Method Get -Headers $Headers -Uri "$uri/CMDB/ConfigItem/${ConfigItemID}?SessionID=${SessionID}" if ( $response.Error ) { $code = $response.Error.ErrorCode $message = $response.Error.ErrorMessage Write-Host "Get ConfigItems with id $ConfigItemID failed (${code}: $message)" continue } $ConfigItem = $response.ConfigItem Write-Host -NoNewLine CI $ConfigItem.Number ($ConfigItem.Name) "is " if ( $ConfigItem.CIXMLData.WarrantyExpirationDate -le $Today ) { Write-Host expired $UpdatedCI = @{ SessionID = $SessionID ConfigItemID = $ConfigItemID ConfigItem = @{ Class = $Class Name = $ConfigItem.Name DeplState = "Expired" InciState = $ConfigItem.InciState CIXMLData = $ConfigItem.CIXMLData } } $json = $UpdatedCI | ConvertTo-Json -Depth 5 $response = Invoke-RestMethod -Method Post -Headers $Headers -Uri "$uri/CMDB/ConfigItem/${ConfigItemID}" -Body $json if ( $response.Error ) { $code = $response.Error.ErrorCode $message = $response.Error.ErrorMessage Write-Host "Seettig ConfigItems with id $ConfigItemID to eexpired failed (${code}: $message)" continue } } else { Write-Host not expired } } }