Избегайте добавления в массив в цикле.Лучший способ получить данные цикла в переменной - просто собрать выходные данные цикла в переменной:
$ListOfDocuments = foreach ($Row in $SqlDocmasterTableResuls.Rows) {
New-Object -Type PSObject -Property @{
"DOCNUM" = $Row.DOCNUM
"SOURCE" = $Row.DOCLOC
"DESTINATION" = $Row.DOCLOC -replace ...
}
}
Вам не нужно окружающее условие if
, потому что если в таблице нетЛюбые строки, которые цикл должен пропустить, оставляя вас с пустым результатом.
Поскольку вы все равно хотите вернуть список, вам даже не нужно собирать выходные данные цикла в переменной.Просто оставьте вывод как есть, и он все равно будет возвращен.
Также избегайте повторения операций в цикле, когда их результат не изменяется.Вычислите экранированные исходные и конечные пути один раз перед циклом:
$srcPath = [regex]::Escape($this.iManSourceFileServerName + ':' + $this.iManSourceFileServerPath.ROOTPATH)
$dstPath = [regex]::Escape($this.iManDestinationFileServerName + ':' + $this.iManDestinationFileServerPath.ROOTPATH)
и используйте переменные $srcPath
и $dstPath
внутри цикла.
Что-то подобное должно сделать:
$SqlDocmasterTableResuls = $this.SqlConnection.GetSqlData("SELECT ...")
$srcPath = [regex]::Escape($this.iManSourceFileServerName + ':' + $this.iManSourceFileServerPath.ROOTPATH)
$dstPath = [regex]::Escape($this.iManDestinationFileServerName + ':' + $this.iManDestinationFileServerPath.ROOTPATH)
foreach ($Row in $SqlDocmasterTableResuls.Rows) {
New-Object -Type PSObject -Property @{
'DOCNUM' = $Row.DOCNUM
'SOURCE' = $Row.DOCLOC
'DESTINATION' = $Row.DOCLOC -replace $srcPath, $dstPath
}
}
return