powershell - 如何遍历表中的列值并通过powershell创建文件夹
问题描述
我正在尝试通过 powershell 实现以下目标:
我有一个包含 5 列的表(TBL_DDL)(CATALOG、SCHEMA、OBJECT_TYPE、OBJECT_NAME、DDL)
现在,我从该表中提取数据,然后尝试通过连接 C: 驱动器中的前 4 列(CATALOG、SCHEMA、OBJECT_TYPE、OBJECT_NAME)来创建文件夹结构,然后将数据导出到 txt 文件中的 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
目前,我在 $dt 中得到 0 行。干杯
解决方案
您可以使用 System.Data.DataTable 对象来拉取您的结果集,然后循环通过它来执行所需的操作。
此处 GetTableValues 函数将检索表值,然后使用以下 cmdlet 创建目录和文件
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
}
这对我来说非常好。