Все-таки было решено с помощью sqlite в соседней теме
теме.
Пару запросов к базе через модуль PSSQLite, завернул в скрипт powershell. Итог - теперь моя выборка создается за минуту!
Скрипт запрашивает у меня аушку или набор аушек по коротким псевдонимам и я всегда получаю таблицу с выборкой.
Кусок скрипта для примера:
Код:

$time = Measure-Command -Expression {
# блок про аушки
[Parameter(Mandatory=$true)][String]$Region
$ofs=''
$Region= Read-Host "введите одно из значений: All_ALL, All_TT, All_S, All_B, MSK_TT, MSK_B, MSK_S и т.д."
$Region2 = $Region
$date= [datetime]::now.tostring("ddMMyyyy")
$outfile = "D:\SQlite3\result\$Region2`_$date.csv"
$myscripname=$myInvocation.ScriptName
Remove-Item $outfile -ErrorAction SilentlyContinue
if ($Region -eq "MSK_TT") {...}
#тут кусок с наборами аушек и короткими псевдонимами
$OUt = $OU | ForEach {get-adcomputer -Filter {ObjectClass -eq 'Computer'} -SearchBase $_ -Properties CN,LastLogon,lastLogon,lastLogonTimeStamp,CanonicalName,Enabled,whenChanged | Select-Object @{n='System_Unit_Name';e={$_.CN}},@{n='lastLogon';e={[DateTime]::FromFileTime($_.lastLogon)}},@{n='lastLogonTimeStamp';e={[DateTime]::FromFileTime($_.lastLogonTimeStamp)}},Enabled,CanonicalName,whenChanged }| Out-DataTable
$datasource = ".....info.db"
# Удаления прошлых результатов выполнения скрипта
$Query0 = "DROP TABLE AD_list;
DROP TABLE all_pc_result;
# команда создает таблицу в базе с заданными именами столбцов
$Query1 = "CREATE TABLE AD_list (System_Unit_Name,lastLogon,lastLogonTimeStamp,Enabled,CanonicalName,whenChanged)"
Invoke-SqliteQuery -Query $Query1 -DataSource $datasource
# Запись $OUt в таблицу
Invoke-SQLiteBulkCopy -DataTable $OUt -DataSource $DataSource -Table "AD_list" -NotifyAfter 100000 -force
# приводим список AD и список имен ПК к нижнему регистру
$Query2 = "UPDATE all_pc
SET System_Unit_Name = LOWER(System_Unit_Name);
UPDATE AD_list
SET System_Unit_Name = LOWER(System_Unit_Name);"
# выполнение запроса на нижний регистр $Query2
Invoke-SqliteQuery -Query $Query2 -DataSource $datasource
# запрос для создания выборки из таблицы all_pc по списку AD
$Query3 = "CREATE TABLE IF NOT EXISTS all_pc_result AS
SELECT *
FROM all_pc, AD_list USING(System_Unit_Name)
WHERE Ping <> 'No'
GROUP BY System_Unit_Name HAVING max(printf('%s-%s-%s', substr(Data, length(Data) + 1, -4), substr(Data, instr(Data, '.') + 1, 2), substr(Data, 1, 2)));"
# выполнение запроса выборки по списку из AD_list
Invoke-SqliteQuery -Query $Query3 -DataSource $datasource
# экспорт в таблицу csv
D:\SQlite3\soft\sqlite3.exe -header D:\SQlite3\base_test\all_pc_info.db -tabs "select * from all_pc_result" > $outfile
}
$time.ToString()