У меня есть скрипт, который сравнивает ссылки на базы данных и запускает test-path, чтобы проверить, существует ли он, что-либо, что не добавлено в пользовательский объект.Для старых клиентов количество документов, удаленных из файловой системы, но не из базы данных, огромно.Поэтому я пытаюсь немного ускорить это:
Measure-Command -Expression {
$count = 10000
$hashtablelistofitems = @{}
for ($i=0; $i -le $count; $i++)
{
$hashtablelistofitems.add("$i", "i'm a value")
}
} | Select-Object -Property TotalMilliSeconds
Measure-Command -Expression {
$count = 10000
$array = @()
$listofitems = "" | select key,value
for ($x=0; $x -le $count; $x++)
{
$listofitems.key = "$x"
$listofitems.value = "i'm a value"
$array += $listofitems
}
} | Select-Object -Property TotalMilliSeconds
Measure-Command -Expression {
$count = 10000
$myitems = @()
for ($x=0; $x -le $count; $x++)
{
$myitems += @([pscustomobject]@{key=$x.path;ID="i'm a value"})
}
} | Select-Object -Property TotalMilliSeconds
В настоящее время я использую третий подход, результаты этих команд:
TotalMilliseconds
-----------------
40.0566
2609.2074
3061.0848
Так что вы можетевидите, я использую самый медленный метод, и хеш-таблица намного быстрее, чем пользовательский объект.Моя проблема в том, что у меня проблемы с передачей значений хеш-таблиц в модуль отчетов, например Export-Excel
, в аккуратном формате для отправки клиентам.
Существуют ли другие многомерные типы данных, которые я мог бы использовать?или есть способ, которым я могу улучшить скорость пользовательского объекта, который я использую в настоящее время?
Вот код, который я использую для получения данных:
foreach ($file in $files) {
if (!(Test-path $file.Path)) {
$myitems +=
@([pscustomobject]@{path=$file.path;ID=$file.ID;ObjectID=$file."Object ID";ObjectType=$file."Object Type"})
}
Write-Verbose "Processed :: $($file.path)"
}
Тогда просто пайпинг $myitems
до export-excel