pe forumurile comunității PowerShell, am primit recent întrebări care ne întreabă dacă este posibilă stocarea variabilelor PowerShell în fișiere externe și, dacă da, cum se face. Este într-adevăr posibil să stocați variabile în fișiere externe pentru a le utiliza PowerShell. Aceste variabile externe pot fi stocate într-o varietate de tipuri de fișiere. Stocarea lor într-un fișier PowerShell este una dintre cele mai ușoare, deoarece puteți sursa doar aceste fișiere.
vom acoperi următoarele metode pentru a stoca variabile:
- fișiere Script
- fișiere Text
- fișiere JSON
- fișiere XML
exemplele prezentate în această postare sunt destul de simple, dar asta nu înseamnă că nu este posibil să stocați variabile destul de complexe în fișiere externe. Dacă doriți să experimentați stocarea variabilelor externe, puteți descărca fișierele eșantion pentru această postare aici.
fișiere Script
Dot sourcing poate fi cel mai simplu mod de a stoca variabile externe—dar nu este întotdeauna cel mai sigur. Atunci când un fișier este punct provenind suntem spune PowerShell pentru a executa acel script. Dacă există un cod rău intenționat în fișier, atunci acel cod va rula și el.
în addtion la Dot sourcing, va trebui, de asemenea, să se asigure că variabilele externe PowerShell script este semnat și că executarea de la distanță este activată pe mașină.
Dot sourcing poate fi de ajutor dacă avem nevoie pentru a obține informații despre ceva dinamic. Pentru celelalte opțiuni discutate în acest post, datele stocate în tipurile de fișiere vor trebui modificate manual.
1234 |
# aici ne dot sursă fișierul variabilele externe PowerShell. "C:\Test\BlogPosts\ExternalVariables.ps1" scrie-gazdă $External_Variable1 $External_Variable2
|
Iată ce este în fișierul ExternalVariables.ps1:
#declararea variabilelor externe
$External_Variable1 = ‘Sapien’
$External_Variable2 = ‘tehnologii’
fișierele Text
variabilele externe pot fi, de asemenea, stocate într-un număr de fișiere text și formate, cum ar fi textul simplu într-un general .fișier txt folosind cmdletul Get-Content. Când importăm variabile în acest fel, nu executăm niciun cod, deci nu este o problemă dacă nu monitorizați constant fișierele pentru a obține informații.
următoarele trei imagini sunt exemple de moduri diferite de stocare a informațiilor într-un fișier text simplu:
12345678910111213 |
$ScriptDir = Split-Path $script: MyInvocation.Comandamentul meu.Path$ScriptDir + = " \ ExternalVariables.txt " # utilizați obțineți conținut pentru a obține toate liniile care se află în fișierele txt $External_Variables = Get-Content-Path $ScriptDir # informațiile din ExternalVariables vin ca o matrice # deci, pentru a imprima toate șirurile din $program folosim un foreach loopforeach ($string în $ External_Variables){Write-Host $string}
|
Iată ce este în Exteriorvariabile.fișier txt:
„PowerShell Studio”
„PrimalScript”
„rechemare Versiune”
la fel ca o matrice, putem stoca tabele hash în fișiere text. Pentru a obține tabelul nostru hash dintr-un fișier text, va trebui să conducem ieșirea Get-Content la cmdletul ConvertFrom-StringData pentru a converti ieșirea într-un tabel hash.
1234567891011121314 |
$ScriptDir = Split-Path $script: MyInvocation.Comandamentul meu.Path$ScriptDir + = " \ ExternalVariablesHashTable.txt" # obținerea conținutului fișierului text variabil extern # acest fișier este stocat în textul planului și nu este în niciun format special # folosim parametrul "raw" aici în Get-Content, astfel încât atunci când obținem conținutul# fișierului, astfel încât hashtable-ul nostru să nu fie convertit într-un obiect$program = Get-Content-raw-Path $ScriptDir | ConvertFrom-StringData write-host "`nType of the variable `$program 'n"$program.GetType () scrie-gazdă "`nPrinting `$program" $program
|
Iată ce este în Exteriorvariableshashtable.txt:
Company=Sapien Technologies
Product=PowerShell Studio
stocarea informațiilor într-un fișier text ca acesta este o modalitate convenabilă de a păstra informațiile într-un format care poate fi citit de om. Fișierele Text au, de asemenea, avantajul de a nu fi executabile, deci dacă se întâmplă să existe un cod rău intenționat stocat într-un fișier, nu îl gestionați în mod regulat, acesta nu va fi executat.
fișier JSON
de asemenea, este posibilă stocarea variabilelor externe într-un format JSON. Singura avertisment fiind că va trebui să țeavă din nou ieșirea Get-conținut la un alt cmdlet; cu toate acestea, de data aceasta este ConvertFrom-Json, mai degrabă decât ConvertFrom-StringData. Pentru cei care nu sunt familiarizați cu JSON sau trebuie să perie pe formatul, Vă rugăm să vizitați www.JSON.org.
1234567891011121314151617 |
$ScriptDir = Split-Path $script: MyInvocation.Comandamentul meu.Cale$ScriptDir + = " \ jsonfile.json " #obținerea informațiilor din fișierul json #trecem ieșirea de la Get-Content la ConvertFrom-Json cmdlet$JsonObject = Get-Content $ScriptDir | ConvertFrom-Json#chiar acum avem o matrice ceea ce înseamnă că trebuie să indexăm # un element pentru a-l folosi$JsonObject.Utilizatori # când indexate putem apela atributele elementsWrite-gazdă "atribute individual printed"$JsonObject.Users.Name$JsonObject.Users.Age$JsonObject.Users.City$JsonObject.Users.Country$JsonObject.Users.UserId
|
Iată ce este în fișierul JSON:
{
„utilizatori”:
}
fișier XML
dacă stocăm variabilele noastre într-un format XML, putem adăuga comentarii la fișierul variabil, dacă este necesar. Singurele două formate de Fișiere despre care vom vorbi în această postare care permit comentarii sunt XML sau PS1. Fișierele JSON și TXT normale nu permit comentarii. Pentru o prezentare concisă a formatului XML, vizitați w3schools.com/xml.
123456789 |
$ScriptDir = Split-Path $script: MyInvocation.Comandamentul meu.Cale$ScriptDir + = " \XMLFile.xml " # citiți în toate informațiile din fișierul nostru XML variabile#va trebui să aruncăm variabila ca atunci când stocăm toate informațiile fișierului în ea $XML_Variable = Get-Content-Path $ScriptDir #referențierea tabloului de obiecte alimentare stocate în obiectul mic dejun$XML_Variable.Breakfast_menu.Alimente / Format-listă
|
Iată ce este în fișierul XML:
Belgian Waffles
.95
Two of our famous Belgian Waffles with plenty of real maple syrup
650
Strawberry Belgian Waffles
.95
Light Belgian waffles covered with strawberries and whipped cream
900Berry-boabe vafe belgiene
$8.95
vafe belgiene acoperite cu fructe de padure proaspete asortate si frisca
900
atunci când alegeți între formatele de stocare XML și JSON, se reduce la care unul este mai familiar. Deoarece principala diferență dintre ele este că XML permite comentarii, este doar o chestiune de preferință. Toate aceste opțiuni sunt modalități viabile de a stoca informații în fișiere externe pentru a fi citite de un alt program sau utilizate de același program ulterior. Cât de complex, dacă este dinamic sau nu și cât de multe informații trebuie stocate vor dicta formatul de utilizat.
exportul în fișiere
la fel ca importul de informații cu PowerShell, este de asemenea posibil să exportați informații și obiecte într-un fișier extern din programul pe care îl folosim. PowerShell Studio 2018 vine cu fragmente care facilitează exportul informațiilor—pur și simplu treceți calea fișierului extern și a obiectului la funcția de export corespunzătoare, iar fragmentul va avea grijă de orice altceva. Vom acoperi exportul în fișiere folosind fragmente într-o viitoare postare pe blog.