Loading

Verify

Skip Feed
  1. Computer Name from SLM
     I'm trying to figure out why the Powershell below seems to cause the memory consumption on the Server to go dramatically. I implemented the code on one Service and the memory with go up 10% but eventually go back down. If I implement it on all the Services it causes huge Memory issues. Any help is appreciated. function SLM_Computers   {   param($slmuser,$DeploymentType,$New_Hire,$BusinessArea, $AltUserID)     $apiAccountName = Get-APSetting "SLMApiAccountName"   $SLMServerName = Get-APSetting "SLMServerName"   $SLMCustomerId = Get-APSetting "CustomerId"       $apiUserAccount = Get-ServiceAccount -Name "$apiAccountName" -Scope 1   $securePassword = ConvertTo-SecureString $($apiUserAccount.Password) -AsPlainText -Force   $credential = New-Object Management.Automation.PSCredential ($($apiUserAccount.AccountName), $securePassword)   $version = 8         $cl = @()   #Verify Computer is in SCCM before placing in list   Function Search_Computer_SCCM   {   param ($Resource)     $SCCMServiceAccountName = Get-APSetting "SCCMServiceAccountName"   $SLMServerName = Get-APSetting "SCCMServer"   $SCCMUserName = Get-APSetting "SCCMUserName"   $SCCMServer = Get-APSetting "SCCMServer"   $SCCMSiteCode = Get-APSetting "SCCMSiteCode" $SCCMServiceAccount = Get-ServiceAccount -Name "$SCCMServiceAccountName" -Scope 0   $SCCMServiceAccountPassword = $SCCMServiceAccount.Password | ConvertTo-SecureString -AsPlainText -Force   $SCCMCredentials = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $SCCMUserName, $SCCMServiceAccountPassword   $extragwmiParameters = [ordered]@{   "Namespace" = "Root\SMS\Site_$SCCMSiteCode"   "ComputerName" = $SCCMServer   "Credential" = $Credentials   "ErrorAction" = 'Stop'   }   #endregion #region Validate Old SCCM resource     #Firsts checks if the resource is a device (computer)   if ($Resource.Contains('\'))   {   $OldDomainPart = $Resource.Split('\')[0]   $OldComputerNamePart = $Resource.Split('\')[1]   $OldResObj = @(Get-WmiObject -Class SMS_R_SYSTEM -Filter "Name = '$OldComputerNamePart' AND ResourceDomainORWorkgroup = '$OldDomainPart' AND Client = '1'" @extragwmiParameters)   }   else { $OldResObj = @(Get-WmiObject -Class SMS_R_SYSTEM -Filter "Name like '%$Resource%' AND Client = '1'" @extragwmiParameters) }     # if ($OldResObj.Count -gt 1) { throw "More than one device/computer with name $Resource found (with Client = 1)" } return $OldResObj.Name }   Function Search_Comp_SLM {   param($slmuser, $SnowAPICred)   $cl =@() $userapi =" http:// " + $SLMServerName + "/api/customers/1/users/?%24filter=endswith%28Username%2C%27" + $slmuser + "%27%29&`$top=100&`$format=json" $body = Invoke-RestMethod -Uri $userapi -Method Get -Credential $credential -disablekeepalive $SnowUserID = $body.Body.body.ID foreach ($s in $SnowUserID){   $compapi = " http:// "+ $SLMServerName + "/api/customers/1/users/" + $s + "/computers/?`$top=1000&`$format=json" $comptemp = Invoke-RestMethod -Uri $compapi -Method Get -Credential $credential -disablekeepalive $comps += $comptemp.body   }       #Evaluate parameter conditions   if ($DeploymentType -eq 'SCCM' -or $DeploymentType -eq 'Manual' -and $BusinessArea -eq "Commercial") {     $justcomps = $comps| ? {($_.Body.OperatingSystem -like "*Windows*") -and ($_.Body.OperatingSystem -notlike "*server*") -and ($_.Body.Organization -notlike "*T2017*") -and ($_.Body.Organization -notlike "*FED*") -and ($_.Body.Name -NOTlike "XD7-M*") }   ForEach($comp in $justcomps) {     #check if computer is in SCCM   $checkSCCM = Search_Computer_SCCM -Resource $comp.Body.Name   if ($checkSCCM) {   $cl += $comp.Body.Name     }   $checkSCCM = $   }   } elseif ($DeploymentType -eq 'SCCM' -or $DeploymentType -eq 'Manual' -and $BusinessArea -eq "T2017"){     $justcomps = $comps| ? {($_.Body.OperatingSystem -like "*Windows*") -and ($_.Body.OperatingSystem -notlike "*server*") -and ($_.Body.Organization -like "*T2017*") -and ($_.Body.Name -NOTlike "FEDVDAP*") }   $cl += $justcomps.Body.Name   }     elseif ($DeploymentType -eq 'SCCM' -or $DeploymentType -eq 'Manual' -and $BusinessArea -eq "T3"){     $justcomps = $comps| ? {($_.Body.OperatingSystem -like "*Windows*") -and ($_.Body.OperatingSystem -notlike "*server*") -and ($_.Body.Organization -like "*Fed*") }   $cl += $justcomps.Body.Name   }     elseif ($DeploymentType -eq 'MAC' -and $BusinessArea -eq "Commercial") {     $justcomps = $comps| ? {$_.Body.Manufacturer -like "*Apple*"}   $cl += $justcomps.Body.Name   } elseif ($DeploymentType -eq 'SCCM' -or $DeploymentType -eq 'Manual' -and $BusinessArea -eq "Fidelis") {     $justcomps = $comps| ? {($_.Body.OperatingSystem -like "*Windows*") -and ($_.Body.OperatingSystem -notlike "*server*") -and ($_.Body.Organization -notlike "*T2017*") -and ($_.Body.Organization -notlike "*FED*") -and ($_.Body.Name -NOTlike "XD7-M*") }   $cl += $justcomps.Body.Name }   return $cl }   $complist =@()     if (($New_Hire -eq 'Yes') -and ($DeploymentType -ne 'AD')){   $cl = 'Unknown'   }     if ($DeploymentType -eq 'AD'){   $cl = 'Citrix'   }     Else{   $complist += Search_Comp_SLM -slmuser $slmuser   if ($AltUserID){   $complist += Search_Comp_SLM -slmuser $Altuserid   }       } $complist | Sort-Object | Get-Unique   }
    Expand Post

    • Hi, I haven't been able to run your script myself, but perhaps I can help anyway. What happens if you run the script manually in PowerShell? Does the memory consumption look the same? Do you get a large amounts of objects from  Search_Comp_SLM ? What if you run the script without ever calling the SCCM function? Would that make it use less memory? I noticed that the function Search_Computer_SCCM refers to a variable called $Credentials which is never defined. The function Search_Comp_SLM refers to a variable called $credential which is not defined, but it has a parameter called $SnowAPICred which should probably be used instead. Perhaps a part of the script was not pasted in the post? In the end of the script I would suggest that you first filter the result before sorting it. Instead of: $complist | Sort-Object | Get-Unique‍ Do this: $complist | Get-Unique | Sort-Object‍ However, this should not affect performance much unless you are dealing with very large amounts of objects. Regards John
      Expand Post

End of Feed
1 Chatter Feed Items
ALL CONVERSATIONS
UNSOLVED
ARTICLES
1 Post

Related Topics

    Loading
    Verify | Flexera