Я создаю сценарий powershell из запроса SQL.Запрос создает список команд, используя команду New-Item
.Общее количество команд было около 450 тыс., Все экспортировано в файл .ps1
.Я мог успешно выполнить этот сценарий.
Позже я обнаружил, что некоторые команды не сработали, поэтому мне нужно было добавить протоколирование ошибок.Для каждой строки я добавил в конце:
-errorvariable $err; if ($err) {code to write to error log, confirmed working in another script}
Если экспортировать это в .ps1
и выполнить, то получится StackOverflowException
, он вообще не запускает никаких команд.Во время устранения неполадок я обнаружил, что если я сократю список команд, скрипт будет работать.Я могу выполнить фрагменты по 62 000 строк, но если я выполню более 62469 строк, я получу исключение.Действительно странная вещь заключается в том, что если я сужусь до точной строки, в которой происходит сбой, я могу сократить последнюю команду до точки, в которой будет выполняться сценарий, а затем добавить еще один символ, и он потерпит неудачу.
Вот пример одной из командных строк:
New-Item -Path "C:\Temp\TestingFolder\TestingSubFolder\F\8F\D42D79CD440CE98D31E9A1353CAA3\6121094601.03.pdf" -Value "F8FD42D79CD440CE98D31E9A1353CAA3` 6121094601.03.pdf" -Type File -Force -errorvariable err
if ($err) {
Add-Content "C:\Temp\AnalogVaultLog.txt" -Value ("$(Get-Date -format 'u')" + "`r`n" + 'New-Item -Path "C:\Temp\TestingFolder\TestingSubFolder\F\8F\D42D79CD440CE98D31E9A1353CAA3\6121094601.03.pdf" -Value "F8FD42D79CD440CE98D31E9A1353CAA3` 6121094601.03.pdf" -Type File -Force' + "`r`n" + $err + "`r`n") -Force
}
Как я уже сказал, я могу выполнить скрипт длиной 450 тыс., В котором нет вспомогательного оператора журнала ошибок в каждой строке.и это работает, и у этого сценария гораздо больше символов и общих команд, чем из-за неудачного фрагмента строки 62470.Что будет причиной этого исключения?