2012-07-03 4 views
1

PowerShell에서 사용자 정의 데이터 유형을 사용할 수 있습니까?PowerShell에서 사용자 지정 (구조화 된) 데이터 유형을 만들 수 있습니까?

아래와 같이 (구조화 된) 변수를 갖고 싶습니다. 다음은 구문 상 올바르지 않습니다. 나는 단지 세 가지 변수를 따르는 클럽을 원합니다.

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" 
    } 

구조화 된 변수를 만들 수있는 방법이 있습니까? 해당 변수와 프로세스의 배열을 만들 수 있습니까?

답변

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 'public class DatabaseDetails { public string DatabaseName; public string TableName; public string[] ColumnNames; }' -Language CSharp 

$details = New-Object DatabaseDetails 
4

:

$result = @() 
for (... my loop ...) { 
    ... retrieve data ... 
    $props = @{ Databasename = $dbname; Tablename = $tname; Cols = $colarray } 
    $result += (new-object pscustomobject -prop $props) 
} 
관련 문제