A PSD1 fájl használata

A PSD1 fájl a PowerShell Data File formátumot jelenti. Ez gyakorlatilag egy speciális szkript fájl, amiben egy hashtábla definíciót tárolunk. Nézzünk erre az előzőkhez hasonló adattartalommal rendelkező példát:

@{

# This is a comment row

    SQLServerData = @{

        ServerName = "WS2019SQL"

        IP         = "192.168.1.1"

    }

 

<#

    this is a multi line

    comment

#>

    DBData = @{

        Database = "MigrationData"

        Table    = "Users"

        Columns  = ("Name", "Samaccountname", "Department")

        Orgs     = ("Marketing", "Sales", "Manfacturing",

            "Finance", "Engineering")

    }

 

    AdditionalData = @{

        Number = 123

        Date   = {[datetime] "2022.12.19"}

        Answer = $true

    }

}

Látható, hogy egy kukac-kapcsos zárójel kombinációval kezdődik, mint ahogy a hashtáblák jelölése van PowerShell-ben. Ezen belül lehet újabb hashtáblákat létrehozni, tehát tetszőleges mélységben szervezhetjük adatainkat. Természetesen megjegyzéseket is berakhatunk, akár többsorosakat is.

Ha már PowerShell, akkor itt megpróbálok érdekesebb dolgokat is elrejteni! Az AdditionalData részbe beraktam egy Date adatot, ami egy szkriptblokk és az Answer pedig egy változó.

Elég egyszerű ezt beolvasni:

PS C:\> $PSConfigPSD1 = Import-PowerShellDataFile -Path C:\PSTools\Config.PSD1

PS C:\> $PSConfigPSD1

 

Name                           Value

----                           -----

DBData                         {Table, Database, Columns, Orgs}

SQLServerData                  {IP, ServerName}

AdditionalData                 {Date, Number, Answer}

 

 

PS C:\> $PSConfigPSD1.AdditionalData

 

Name                           Value

----                           -----

Date                           {[datetime] "2022.12.19"}

Number                         123

Answer                         True

 

 

PS C:\> $PSConfigPSD1.DBData.Orgs

Marketing

Sales

Manfacturing

Finance

Engineering

A beolvasáshoz közvetlenül az Import-PowerShellDataFile  cmdletet használhatjuk. Ez ellenőrzi a fájl tartalmát és végrehajtható kódot nem enged beolvasni, tehát véletlenül nem tudunk vele kártékony kódot futtatni. A példaállományomban a Date értéke is adat, hiszen a PowerShellben a szkriptblokk is egy adattípus:

PS C:\> $PSConfigPSD1.AdditionalData.Date.gettype().fullname

System.Management.Automation.ScriptBlock

Tehát ez az Import-PowerShellDataFile cmdlet nem egyszerűen beolvassa a fájlt, hanem bizonyos adatkonverziókat is elvégez. Nézzük meg részletesebben az Answer-t:

PS C:\> $PSConfigPSD1.AdditionalData.Answer

True

PS C:\> $PSConfigPSD1.AdditionalData.Answer.gettype().fullname

System.Boolean

Látható, hogy a változót is feloldotta, így nem egy egyszerű szövegként értelmezte, hanem tényleg a változó értéke került be, a mi esetünkben egy Boolean adattípusú True.

Térjünk vissza a Date-hez! Ha nem szkiptblokkba ágyaztuk volna, akkor a biztonsági ellenőrzés miatt hibát kapnánk:

PS C:\> $PSConfigPSD1 = Import-PowerShellDataFile -Path C:\PSTools\Config.PSD1

Exception calling "SafeGetValue" with "0" argument(s): "Cannot generate a Wind

ows PowerShell object for a ScriptBlock evaluating dynamic expressions. Dynami

c expression: @{

# This is a comment row

    SQLServerData = @{

Térjünk vissza az eredeti Date-hez!  Próbáljuk a végrehajtó operátorral végrehajtani azt a szkriptblokkot:

PS C:\> & $PSConfigPSD1.AdditionalData.Date

[datetime] "2022.12.19"

Hoppá! Annak ellenére, hogy ez egy szkriptblokk, mégsem hajtódott végre. Mi lett ebből akkor?

PS C:\> (& $PSConfigPSD1.AdditionalData.Date).gettype().fullname

System.Management.Automation.ScriptBlock

Ez valahogy továbbra is szkriptblokk… Akkor próbáljuk még egyszer végrehajtani a végrehajtást!

PS C:\> &(& $PSConfigPSD1.AdditionalData.Date)

 

2022. december 19., hétfő 0:00:00

Na, így már jó lett. Nem teljesen értem, hogy miért kell kétszer végrehajtani, szerintem ez az Import-PowerShellDataFile hibája, de azért ez nem akkora kellemetlenség. Természetesen nem érdemes kritikátlanul végrehajtani az így beolvasott szkriptblokkokat, érdemes „beleolvasni” ezekbe és csak akkor végrehajtani, ha nincs bennük semmilyen kártékony kód.



Word To HTML Converter