1

PowerShell でカスタム データ型を使用することは可能ですか?

以下のような(構造化された)変数が欲しいです。次のことは構文的に正しくありません.次の3つの変数をクラブにしたいだけです.

Variable Databasedetails {
   string  DatabaseName
   string  TableName
   string[] columnNames 
}

Powershell がそれを行う準備ができている場合、クエリを簡単に作成するのに役立つ単一の変数配列を使用できます。

$Databasedetails = { "DataBaseName=DB-someX","TableName=TableX"," (ColumnNames={"Col1","col2"}" 
                    "DataBaseName=DB-someY","TableName=TableY"," (ColumnNames={"Col2","colN"}"
                  }

Foreach ($DBdetails in $DataBaseDetails)
  {
      $query= "SELECT [$DBdetails.$columnName] FROM [$DBdetails$DatabaseName].[dbo].[$DBdetails.$TableName]"
      invoke-sqlcmd -query $query -ServerInstance $srvInstance"
  }

構造化変数を作成する方法はありますか?その配列を作成して処理できますか?

4

2 に答える 2

5

最も簡単な方法は、ハッシュテーブルを使用してカスタム オブジェクトに変換することです。

$result = @()
for (... my loop ... ) {
    ... retrieve data ...
    $props = @{ Databasename = $dbname; Tablename = $tname; Cols = $colarray }
    $result += (new-object pscustomobject -prop $props)
}
于 2012-07-03T15:50:45.757 に答える
3

Add-MemberまたはAdd-Typeのいずれかを調べる必要がありますが、後者は Powershell 2.0 のみです。

$details = New-Object PsObject
             | Add-Member NoteProperty DatabaseName '' -pass 
             | Add-Member NoteProperty TableName '' -pass
             | Add-Member NoteProperty ColumnNames @() -pass

またはAdd-Typeを使用

Add-Type 'public class DatabaseDetails { public string DatabaseName; public string TableName; public string[] ColumnNames; }' -Language CSharp

$details = New-Object DatabaseDetails
于 2012-07-03T13:17:40.877 に答える