Создайте 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:"."
}