Преобразование SQL-содержимого varbinary в файл .pkg с помощью PowerShell - PullRequest
0 голосов
/ 28 февраля 2019

Я использую SQL Server, и у меня есть таблица SQL с именем [dbo].[TemplatePackageContent], которая имеет только два поля:

[TemplatePackageContentId] [uniqueidentifier] NOT NULL,
[Content] [varbinary](max) NULL

Я хотел бы создать сценарий PowerShell, который считывает весь контент из этой таблицы и для каждогострока, она будет генерировать файл в заданном каталоге с форматом {TemplatePackageContentId}.pkg на основе поля Content.

Пока что мне удалось прочитать все содержимое таблицы:

param(
   [string] $dataSource = "(localdb)\mssqlLocalDb",
   [string] $database = "Hda_tenancy1",
   [string] $sqlCommand = $("SELECT * FROM TemplatePackageContent")
)

$connectionString = "Data Source=$dataSource; " +
            "Integrated Security=SSPI; " +
            "Initial Catalog=$database"

$connection = new-object system.data.SqlClient.SQLConnection($connectionString)
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
$connection.Open()

$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet) | Out-Null

$connection.Close()

$dataSet.Tables

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

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

Каков наиболее оптимальный способ преобразования всех полей «Содержимое» в файлы в формате .pkg и какую библиотеку следует использовать или какой подход?Есть идеи?Приветствия

1 Ответ

0 голосов
/ 01 марта 2019

Я закончил с этим решением:

param(
   [string] $dataSource = "(localdb)\mssqlLocalDb",
   [string] $database = "Hda_tenancy1",
   [string] $templatePath = "C:\dev\hubadvance\Seeding\Templates\"
)

$sqlCommand = $("SELECT * FROM TemplatePackageContent");
$connection = new-object System.Data.SqlClient.SQLConnection("Data Source=$dataSource;Integrated Security=SSPI;Initial Catalog=$database");
$cmd = new-object System.Data.SqlClient.SqlCommand($sqlCommand, $connection);

$connection.Open();
$reader = $cmd.ExecuteReader();

$results = @();
while ($reader.Read())
{
    $row = @{}
    for ($i = 0; $i -lt $reader.FieldCount; $i++)
    {
        $row[$reader.GetName($i)] = $reader.GetValue($i);
    }
    $results += new-object psobject -property $row;         
}
$connection.Close();

foreach ($row in $results) 
{
    Write-Host $row.TemplatePackageContentId;
    $path = $templatePath + $row.TemplatePackageContentId + ".pkg";
    [System.IO.File]::AppendAllText($path, $row.Content);
} 
...