У меня есть куча файловых папок со многими миллионами файлов / папок. Я использую gci -Recurse
, чтобы получить полный список каталогов / файлов на общем ресурсе, и мне нужно загрузить несколько фрагментов информации с этого gci на сервер SQL для дополнительного анализа. Команда, которую я использую для получения данных:
gci $SharePath -Recurse | select FullName, Attributes, Length, CreationTimeUtc, LastAccessTimeUtc, LasWriteTimeUtc
Теперь я могу просто передать это на Write-SQLTableData
, используя рекомендованный синтаксис для принудительной установки групповых вставок, как предложено в варианте 3 для Microsoft Write-SqlTableData
страница документации , например:
$Params = @{
ServerInstance = 'sqlservername'
DatabaseName = 'databasename'
SchemaName = 'dbo'
}
,(gci $SharePath -Recurse | select FullName, Attributes, Length, CreationTimeUtc, LastAccessTimeUtc, LasWriteTimeUtc) | Write-SqlTableData @Params -TableName 'Table1'
Результатом этого, однако, является то, что gci занимает несколько часов, чтобы завершить работу без обратной связи и использовать много ГБ памяти и замедлить мой машина для сканирования, прежде чем, наконец, сбросить все данные в SQL. Если я опускаю ,(
и соответствующий )
, данные перемещаются в SQL по мере их генерирования, однако сервер SQL заполнен миллионами отдельных вставок.
What I ' m ищет промежуточный ответ, который использует конвейер. Я знаю, что могу сохранить результаты gci в переменной $gciresults
, а затем передать 1000 строк за один раз SQL, используя $gciresults[0..999]
и так далее, но я пытаюсь использовать конвейер, поэтому я не использую слишком много много памяти. В идеале, должен быть какой-нибудь командлет, который я назову batching-cmdlet
, который позволил бы мне разбить входящие данные на куски размером в куски, не сохраняя их все в памяти, например, так:
gci ... | select FullName, ... | batching-cmdlet -batchsize 1000 | Write-SqlTableData @Params -TableName 'Table1'
Ищет такой командлет оказался неудачным. У кого-нибудь есть мысли, как мне это сделать? 1028 *? 1022 *