Добавление к выходным данным сценария Powershell

#sql-server #powershell

#sql-сервер #powershell

Вопрос:

Я пытаюсь написать сценарий powershell, который создал бы sql-файл со списком имен файлов в заданном каталоге, добавляемым оператором ПЕЧАТИ и командой «: r» в начале каждого имени файла и завершается «GO» в конце имени файла.

Пожалуйста, смотрите ниже.

 PRINT 'C:/Schemas/Admin.sql'
GO
:r "C:/Schemas/Admin.sql"
GO
PRINT 'C:/Schemas/Audit.sql'
GO
:r "C:/Schemas/Audit.sql"
GO

  

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

 (get-childitem "C:schemas" -recurse | where {$_.extension -eq ".sql"}).fullname | out-file "C:powerShellmasterSQL.sql"

  

Ответ №1:

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

Сначала выполните фильтрацию самой Get-ChildItem команды, предоставив поставщику файловой системы тяжелую работу. Намного быстрее, чем получение всех файлов и фильтрация с помощью Where-Object

Во-вторых, используйте Set-Content , чтобы не возникало странных или неожиданных проблем с кодировкой.

Последнее, на что следует обратить внимание, это удвоенные двойные кавычки вокруг $_ (полное имя), это для обеспечения того, чтобы путь был заключен в двойные кавычки.

 (Get-ChildItem "C:schemas" -Filter *.sql -Recurse).FullName |
        ForEach-Object {
            "PRINT ""$_"""
            "GO"
            ":r ""$_"""
            "GO"
        } | Set-Content -Path "C:powerShellmasterSQL.sql" -Encoding UTF8