Как l oop через значения столбцов из таблицы и создавать папки с помощью powershell - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь добиться следующего с помощью powershell:

У меня есть таблица (TBL_DDL) с 5 столбцами (CATALOG, SCHEMA, OBJECT_TYPE, OBJECT_NAME, DDL)

Теперь я извлекаю данные из этой таблицы, а затем пытаюсь создать структуру папок, объединяя первые 4 столбца (CATALOG, SCHEMA, OBJECT_TYPE, OBJECT_NAME) в C: диске, а затем экспортируя данные в столбец DDL в текстовый файл.

Например: C: \ "CATALOG" \ "SCHEMA" \ "OBJECT_TYPE" \ "OBJECT_NAME" \ DDL.txt

Я пытаюсь добиться этого с помощью powershell. Кто-нибудь может мне помочь, пожалуйста?

$SqlCmd = 'snowsql -c example -d tu_test -s public  -q "select catalog,schema,OBJECT_TYPE,OBJECT_NAME,DDL from SF_TBL_DDL limit 2"'
$MultiArray = @(Invoke-Expression $SqlCmd)
$dt = New-Object System.Data.Datatable
[void]$dt.Columns.Add("CATALOG")
[void]$dt.Columns.Add("SCHEMA")

$Output = foreach ($Object in $MultiArray)
        {
        foreach ($SCHEMA in $Object.SCHEMA) 
            {

            $someother = New-Object -TypeName psobject -Property @{CATALOG = $Object.CATALOG; SCHEMA = $SCHEMA}
            $nRow = $dt.NewRow()
            $nRow.CATALOG = $someother.CATALOG
            $nRow.SCHEMA = $someother.SCHEMA
            $dt.Rows.Add($nRow)
            }   
        }
$dt.row.count

В данный момент я получаю 0 строк в $ dt. Приветствия

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете использовать объект System.Data.DataTable, чтобы получить ваш набор результатов, а затем l oop через него для выполнения требуемой операции.

Здесь функция GetTableValues ​​будет извлекать значения таблицы и затем использовать следующий командлет создать каталог и файл

  New-Item -ItemType "directory" -Path $dirPath
  New-Item -ItemType "file" -Path $filePath

Полный код выглядит следующим образом

function GetTableValues(){
$DBConnectionString = "<Your DB connection string>";
$sqlConn = new-object System.Data.SqlClient.sqlConnection $DBConnectionString;
$sqlConn.Open();
$sqlCommand = $sqlConn.CreateCommand();
$sqlCommand.CommandText = "select catalog,[schema],OBJECT_TYPE,OBJECT_NAME,DDL from TBL_DDL"; ##Put your correct query here
$result = $sqlCommand.ExecuteReader();
$table = New-Object System.Data.DataTable;
$table.Load($result);
$sqlConn.Close();
return $table;
}

    $tableValue = GetTableValues;

    foreach ($Row in $tableValue)
    { 
      $filePath = "C:\" + $Row.catalog.TrimEnd() + "\" + $Row.schema.TrimEnd() + "\" + $Row.OBJECT_TYPE.TrimEnd() + "\" + $Row.OBJECT_NAME.TrimEnd() + "\" + $Row.DDL.TrimEnd() + ".txt" 
      $dirPath = "C:\" + $Row.catalog.TrimEnd() + "\" + $Row.schema.TrimEnd() + "\" + $Row.OBJECT_TYPE.TrimEnd() + "\" + $Row.OBJECT_NAME.TrimEnd()  
      New-Item -ItemType "directory" -Path $dirPath  ##Creates directory
      New-Item -ItemType "file" -Path $filePath  ##Creates file in $dirPath directory   
    }

Это прекрасно работает для меня.

...