Команды Powershell не работают правильно через пакетный файл

Команды Powershell не работают правильно через пакетный файл

Скрипт получает параметр, отправленный пакетным файлом, считывает файл журнала музыки и генерирует список с заголовком и двумя столбцами, содержащими название музыки и значение LUFS для каждой композиции в соответствии с диапазоном значений LUFS.

Когда я запускаю команду вне пакетного файла, скрипт работает правильно, но когда я запускаю его через пакетный файл, список формируется неправильно.

Сценарий:

Param(
     [decimal]$env:_vLUF
)

[decimal]$vLUFps = $env:_vLUF

$files = "C:\Users\$env:username\Desktop\Logs_LUFS\List Music FOR NORMALIZATION.txt"
$logs = "C:\Users\$env:username\Desktop\Logs_Musics"

# READ LOG files of Musics and generates the List Music FOR NORMALIZATION.txt ($files)

$logMatches = Select-String -Path "C:\Users\$env:username\Desktop\Logs_Musics\*.*" -Pattern '(?<I>^ +I:) +(?<LUFS>.+)|(?<I>^Input Integrated:) +(?<LUFS>.+)' -List | Select-Object -Property FileName -ExpandProperty Matches
    $results = foreach ($log in $logMatches) {
        $pos = $log.Filename.IndexOf("_")
        $leftPart = $log.Filename.Substring(0, $pos)
        $rightPart = $log.Filename.Substring($pos+1)
        $LUFS = $log.Groups | Where-Object { $_.Name -eq "LUFS" }
        [PSCustomObject]@{
            Música = $rightPart
            LUFS = [decimal]$($LUFS.Value -replace " .*")
        }
    }

$vLUFpsLess= ($vLUFps)+ (-0.9)
$vLUFpsGreat= ($vLUFps)+ (-0.5)

$results | Where-Object {($_.LUFS -lt $vLUFpsLess) -or ($_.LUFS -gt $vLUFpsGreat) } | Out-file $files 

Команда, выполняемая в пакетном файле для запуска скрипта:

powershell.exe -executionpolicy remotesigned -File "D:\z_Batchs and Scripts\Batchs\LUFS_Normalize\ArqsNorms_LUFS_pass.ps1" %_vLUF%

Переменная %_vLUF%— это параметр, передаваемый скрипту.

Список, правильно сформированный скриптом, запущенным вне пакетного файла:
введите описание изображения здесь

Список, неправильно сгенерированный скриптом, запущенным через пакетный файл:
введите описание изображения здесь

Примечание:
С помощью пакетного файла скрипт вырезает название музыки с большим количеством символов, а также вырезает столбец LUFS.

Команда Out-file не генерирует файл .txt правильно, когда скрипт выполняется через пакетный файл. Нужно ли мне добавить какую-то другую команду в мой скрипт, чтобы он правильно выполнялся через пакетный файл?

решение1

Это список, правильно сформированный скриптом при его запуске от имени администратора через пакетный файл: введите описание изображения здесь

Это список, неправильно сгенерированный скриптом при его запуске без прав администратора через пакетный файл: введите описание изображения здесь

Это абзац в пакетном файле, который сгенерирует файлы журнала и запустит скрипт PowerShell:

REM ============================================== PARAGRAPH GENERATES LOGS ============================================
:LOGFILES
cls
mode 111,08


  FOR /F "delims=" %%a in ('where .:*.* ^|findstr /vi "_LOUDNORM  _EBU"') DO (
          ffmpeg -hide_banner -i "%%a" -af ebur128 -f null NUL 2> "C:\Users\%username%\Desktop\Logs_LUFS\LOG_%%~na%%~xa"
         )

REM                                           Run the Powershell script in normal mode:
REM powershell.exe -executionpolicy remotesigned -File "D:\z_Batchs e Scripts\Batchs\Normaliza_LUFS\ArqsNorms_LUFS_pass.ps1" %_vLUF%

REM                                           Run the Powershell script in administrator mode:
REM powershell -NoProfile -ExecutionPolicy Bypass -Command "Start-Process -Verb RunAs powershell -ArgumentList '-NoProfile -ExecutionPolicy Bypass -File \"D:\z_Batchs e Scripts\Batchs\Normaliza_LUFS\ArqsNorms_LUFS_pass.ps1\" -_vLUF %_vLUF%'"

Нет никаких проблем в скрипте или в какой-либо команде скрипта, мы должны провести анализ относительно приоритетов выполнения скрипта при его запуске через пакетный файл.

Команда modeв пакетном файле определяет размер экрана (ширина x высота), который будет отображаться пользователю при выполнении пакета.

Когда мы запускаем скрипт в режиме администратора, то, согласно проведенному мной тесту, он берет на себя управление обработкой, и в этом случае команда Out-file генерирует информацию в соответствии с тем, что определено в скрипте, тем самым правильно генерируя текст файла.

Когда мы запускаем скрипт в обычном режиме, он не берет на себя управление обработкой, а команда Out-file генерирует текстовый файл с размером ширины экрана, определенным в абзаце пакетного файла. Поскольку есть музыка, название которой длиннее 111 символов (что является значением, определенным в команде modeпакетного файла), команда обрезает остальную информацию файла, и все, что после 111 символов, не записывается в текстовый файл.

Я не знаю, является ли это ошибкой, но мы должны проанализировать, что каждый скрипт PowerShell, который выполняется через пакетный файл, должен иметь полный приоритет при выполнении своих команд, независимо от того, вызывается ли он в режиме администратора или в обычном режиме.

Связанный контент