Создайте Sql DB с помощью PowerShell для поиска dacpac и присвоения имени db с папкой, расположенной в

Я пытаюсь создать базы данных на Sql Server путем поиска файлов *.dacpac в папке. Для каждого найденного.dacpac мне нужно создать базу данных с именем папки, в которой был найден.dacpac.

пример

C:\ Папка \ содержит

  • C:\ Folder \ Project1 \ mydatabase.dacpac
  • C:\ Folder \ Проект2 \ mydatabase.dacpac
  • C:\ Folder \ Project3 \ mydatabase.dacpac

Скрипт для создания БД

cd "C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin"
$createDB = .\sqlpackage.exe /Action:Publish /SourceFile:"c:\Folder\Project1\mydatabase.dacpac" /TargetDatabaseName:"Project1" /TargetServerName:"(LocalDB)\MSSQLLocalDB"

Я могу получить имена папок для использования в качестве TargetDatabaseName со следующими

 PS C:\> $FolderName = Get-ChildItem C:\Folder | select -ExpandProperty Name
    $FolderName
    Project1
    Project2
    Project3

Я пытаюсь использовать цикл foreach, чтобы найти файлы dacpac и использовать их в качестве SourceFile, а затем найти имя папки для использования в качестве TargetDatabaseName

$FolderName = Get-ChildItem C:\Folder | select -ExpandProperty Name
$dacpacfile = Get-ChildItem C:\Folder -Recurse -Include *.dacpac
    foreach ($dacpac in $dacpacfile){
        $createDB = .\sqlpackage.exe /Action:Publish /SourceFile:$dacpacfile /TargetDatabaseName:$FolderName /TargetServerName:"(LocalDB)\MSSQLLocalDB"}

Полученная ошибка:

. \ sqlpackage.exe: * Не удалось загрузить пакет из C:\Folder\Project1\mydatabase.dacpac C:\Folder\Project2\mydatabase.dacpac C:\Folder\Project3\mydatabase.dacpac'. В строке:4 символа:21 + ... $createDB = .\ Sqlpackage.exe / Действие: Опубликовать /SourceFile:$dacpacfile ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: NotSpecified: (* Не удалось l...tabase.dacpac'.:String) [], RemoteException + FullyQualifiedErrorId: NativeCommandError

Я ожидаю, что мне нужно создать два массива и попробовать пройти их вместе, но не в состоянии сделать это правильно, любая помощь будет принята с благодарностью.

1 ответ

Решение

Вот, попробуйте это:

$dacpacFiles = Get-ChildItem C:\project -Recurse -Include *.dacpac
cd "C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin"
foreach ($dacpacFile in $dacpacFiles)
{
    $dir = Split-Path $dacpacFile.Directory -Leaf
    $filePath = $dacpacFile.FullName
    $createDB = .\sqlpackage.exe /Action:Publish /SourceFile:$filePath /TargetDatabaseName:$dir /TargetServerName:"."
}
Другие вопросы по тегам