Hi, my brain doesen’t work today and I need a pair of fresh eyes. Im creating a powershell script based discovery to create an instance for all of our customers in the microsoft CSP program.
Out of 200+ customers, only one is created in SCOM. I have created similar discoveries with foreach a few other times without issues, but i cannot see my error here.
#GET ALL CUSTOMERS FROM OUR CSP PORTAL
#Only properties needed are selected.
$customerUri = $PartnerCenterPreFix + "/customers"
try {
$Customers = (Invoke-RestMethod -Uri $customerUri -Method Get -Headers $CSPheaders).items | Select-Object id, @{N = 'domain'; E = {$_.companyProfile.domain}}, @{N = 'companyName'; E = {$_.companyProfile.companyName}}
}
catch {
$api.LogScriptEvent("GetCSPCustomers.ps1", 7005, 0, "Failed to retrieve CSP Customers from API $_")
}
#Loop through the customers and add them as instances.
if ($Customers.count -gt "0") {
$Count = $Customers.count
$api.LogScriptEvent("GetCSPCustomers.ps1", 7002, 0, "Found $count Customers")
foreach ($customer in $customers) {
$Instance = $null
$CompanyName = $Customer.companyName
#Create a class instace
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='Intility.Office365.CSPCustomer.Class']$")
#add class properties
$instance.AddProperty("$MPElement[Name='Office365.CSPCustomer.Class']/CustomerName$", $CompanyName)
$instance.AddProperty("$MPElement[Name='Office365.CSPCustomer.Class']/URL$", $customer.domain)
$instance.AddProperty("$MPElement[Name='Office365.CSPCustomer.Class']/CSPID$", $customer.id)
#add entity
$instance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $CompanyName + "(CSP Customer)")
$instance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)
#write data
$api.LogScriptEvent("GetCSPCustomers.ps1", 7003, 0, "Adding $CompanyName")
$discoveryData.AddInstance($instance)
}
}
#Log script execution time
$EndTime = Get-Date
$ScriptTime = ($EndTime - $StartTime).TotalSeconds
$api.LogScriptEvent("GetCSPCustomers.ps1", 7004, 0, "Discovery Ended - execution time $scripttime")
#Return data
$discoveryData
As you can see each customer is logged in the event log, and this works perfectly, but only one object is to find in SCOM – and it’s not the last one…
