Get-PC/Private/Search-CMDB.ps1

124 lines
4.2 KiB
PowerShell
Raw Normal View History

2024-06-11 18:27:55 +00:00
function Search-CMDB{
[CmdletBinding()]
param (
[Parameter(HelpMessage = 'Search LANDesk CMDB by the Name of the CMDM Item'
)]
[string]$Hostname,
[Parameter(HelpMessage = 'Search for the CMDB Item by Asset Tag Number'
)]
[string]$AssetTag,
[Parameter(HelpMessage = 'Search for the CMDB Item by Location'
)]
[string]$Location,
[Parameter(HelpMessage = 'Search for the CMDB Item by Guid/Key'
)]
[string]$key,
[Parameter(HelpMessage = 'Specifying Server',
Mandatory = $false,
DontShow = $true)]
[string] $server = $(Connect-LANDesk)[1],
[Parameter(HelpMessage = 'Specifying LanDesk Framework for api',
Mandatory = $false,
DontShow = $true)]
[string] $framework = $(Connect-LANDesk)[2],
[Parameter(HelpMessage = 'Specifying LanDesk Headers for api',
Mandatory = $false,
DontShow = $true)]
[hashtable] $Headers = $(Connect-LANDesk)[0]
)
if(($Hostname + $AssetTag + $Location + $key) -eq ''){
Write-Warning 'Input cannot be null'
return
}
$attributes = @(
'Guid',
'Title',
'_ConfigTypesCategory',
'Status',
'_SHSAssetTag',
'_SerialNumber',
'_Model',
'ConfigurationItem',
'ConfigurationItem.Guid',
'ConfigurationItem._SHSDELAsset',
'ConfigurationItem._SHSVendorPC',
'CreationDate',
'CreationUser',
'LastUpdate',
'LastUpdateUser',
'Lifecycle',
'_LocationDetails',
'_SHSLocation3',
'_SHSCINotes',
'_SHSCIPrimaryOwner',
'_SHSSCCMScanDate',
'_SHSChassisType',
'_SHSPOANumber'
)
$attributesString = $attributes -join ','
$uri = 'http://' + $server + '/' + $framework + '/api/'
$searchUri = $uri + 'query/?class_name=_CMDBManagement.Call&page_size=20000000&attributes=' + $attributesString + '&v=*' + '&cns=' + '_SHSDeleted-e-0_a_' + 'Title' + '-c-1_a_' + '_SHSLocation3' +'-c-2-&c0=False&c1=' + $Hostname + '&c2=' + $Location
$SearchResults = (Invoke-RestMethod -Uri $searchUri -Headers $headers -Method get).DataRows
$output = @()
if($SearchResults -is [array]){
foreach($result in $SearchResults){
$cmdbRecord = [PSCustomObject]@{
Hostname = $result.values.Title
AssetTag = $result.values._SHSAssetTag
Status = $result.values.Status
Type = $result.values._ConfigTypesCategory
Model = $result.values._Model
Chassis = $result.values._SHSChassisType
SerialNumber = $result.values._SerialNumber
POA = $result.values._SHSPOANumber
Location = $result.values._SHSLocation3
CreationDate = $result.values.CreationDate
CreationUser = $result.values.CreationUser
LastUpdate = $result.values.LastUpdate
LastUpdateUser = $result.values.LastUpdateUser
Lifecycle = $result.values.Lifecycle
Guid = $result.Key
CI = $result.values.ConfigurationItem
}
$output += $cmdbRecord
}
}
else{
$output = [PSCustomObject]@{
Hostname = $SearchResults.values.Title
AssetTag = $SearchResults.values._SHSAssetTag
Status = $SearchResults.values.Status
Type = $SearchResults.values._ConfigTypesCategory
Model = $SearchResults.values._Model
Chassis = $SearchResults.values._SHSChassisType
SerialNumber = $SearchResults.values._SerialNumber
POA = $SearchResults.values._SHSPOANumber
Location = $SearchResults.values._SHSLocation3
CreationDate = $SearchResults.values.CreationDate
CreationUser = $SearchResults.values.CreationUser
LastUpdate = $SearchResults.values.LastUpdate
LastUpdateUser = $SearchResults.values.LastUpdateUser
Lifecycle = $SearchResults.values.Lifecycle
Guid = $SearchResults.Key
CI = $SearchResults.values.ConfigurationItem
}
}
return $output | Select-Object -Property Hostname, Type, Location
}