Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Старожил


Сообщения: 211
Благодарности: 2

Профиль | Отправить PM | Цитировать


Все-таки было решено с помощью 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()

Последний раз редактировалось Griboed0ff, 24-09-2021 в 12:02.

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:53, 24-09-2021 | #10