System Query Script

Without any line of your code it will quite hard to recommend something for you. But some general advices might help either.
If you fire some wmi queries to one machine it makes sense to combine these single queries in one cim session. That usually speeds up those tasks noticeably … here is something I set up time ago for a customer:

function Get-WMIPCInfo {
    [CmdletBinding()]
    param(
        $ComputerName = $ENV:ComputerName
    )
    if (Test-Connection $ComputerName -Quiet -Count 1) {
        Write-Debug -Message "$ComputerName reachable"
        $so = New-CimSessionOption -Protocol DCOM 
        $WMIData = New-CimSession -CN $ComputerName -SessionOption $so
        $BIOS = Get-CimInstance -Class CIM_BIOSElement -CimSession $WMIData | Select-Object -Property *
        $OS = Get-CimInstance -Class CIM_OperatingSystem -CimSession $WMIData | Select-Object -Property *
        $ServiceBranch = (([wmiclass]"\\$($ComputerName)\root\default:stdRegProv").GetStringValue(2147483650,'SOFTWARE\Microsoft\Windows NT\CurrentVersion','ReleaseID')).svalue
        $DISK = Get-CimInstance -Class CIM_LogicalDisk -CimSession $WMIData | Where-Object {$_.DeviceID -eq "C:"} | Select-Object -Property *
        $Computer = Get-CimInstance -Class CIM_ComputerSystem -CimSession $WMIData | Select-Object -Property *
        $IPConfig = Get-CimInstance -Class Win32_NetworkAdapterConfiguration -CimSession $WMIData | Where-Object{$_.DefaultIPGateway -match "((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}"}  | Select-Object -Property *
        #$LoggedOnUser = (Get-CimInstance -Class CIM_Process -CimSession $WMIData -Filter "Name = 'explorer.exe'" -ErrorAction SilentlyContinue | Invoke-CimMethod -MethodName GetOwner).User
        $UserQuery = ( C:\Windows\System32\quser.exe /server:$ComputerName 2> null)
        if ($UserQuery) {
            $UserQuery[1].Trim() -match "^(\S+)\s+.*((\d{2}\.){2}\d{4}\s+\d{2}:\d{2})" | Out-Null
            $LoggedOnUser = $Matches[1]
            $LogonTime = Get-Date -Date $Matches[2]
        }
        Remove-CimSession $WMIData
        Write-Debug -Message "`$BIOS: $BIOS"
        Write-Debug -Message "`$OS:  $OS"
        Write-Debug -Message "`$DISK:  $DISK"
        Write-Debug -Message "`$Computer:  $Computer"
        Write-Debug -Message "`$IPConfig:  $IPConfig"
        Write-Debug -Message "`$LoggedOnUser:  $LoggedOnUser"
        $CIMOutput = [PSCustomObject]@{
            ComputerName = $BIOS.PSComputerName;
            Model = $Computer.Model;
            BIOSName    = $BIOS.Name;
            SMBIOSVersion = $BIOS.SMBIOSBIOSVersion;
            BIOSVersion  = $BIOS.BIOSVersion;
            ReleaseDate  = $BIOS.ReleaseDate;
            SerialNumber = $BIOS.SerialNumber;
            OSCaption   = $OS.Caption;
            OSVersion   = $OS.Version;
            ServiceBranch = $ServiceBranch;
            InstallDate  = $OS.InstallDate;
            LastBootUpTime = $OS.LastBootUpTime;
            PhysicalRAM = [math]::round((($Computer.TotalPhysicalMemory) / 1GB),2);
            DiskSize     =  [math]::round(($DISK.Size / 1GB),2);
            DiskFreeSpace =  [math]::round(($DISK.FreeSpace / 1GB),2);
            IPV4Address     = $IPConfig.IPAddress[0];
            DefaultGateway = $IPConfig.DefaultIPGateway[0];
            DNSDomain = $IPConfig.DNSDomain;
            DHCPEnabled = $IPConfig.DHCPEnabled;
            LoggedOnUser = $LoggedOnUser
            LogonTime = $LogonTime
        }
    $CIMOutput
    }
    else {
        Write-Warning "`tComputer '$($ComputerName)' unreachable`n" 
    }
}

… you can use as an inspiration. :wink: