på våra PowerShell-communityforum har vi nyligen fått frågor om det är möjligt att lagra PowerShell-variabler i externa filer, och i så fall hur görs det. Det är verkligen möjligt att lagra variabler i externa filer för PowerShell att använda. Dessa externa variabler kan lagras i en mängd olika filtyper. Att lagra dem i en PowerShell-fil är en av de enklaste eftersom du bara kan pricka dessa filer.
vi kommer att täcka följande metoder för att lagra variabler:
- skriptfiler
- textfiler
- JSON-filer
- XML-filer
exemplen som visas i det här inlägget är ganska enkla, men det betyder inte att det inte är möjligt att lagra ganska komplexa variabler i externa filer. Om du vill experimentera med att lagra externa variabler kan du ladda ner exempelfilerna för det här inlägget här.
skriptfiler
Dot sourcing kan vara det enklaste sättet att lagra externa variabler—men det är inte alltid det säkraste. När en fil är dot sourced säger Vi PowerShell att utföra det skriptet. Om det finns någon skadlig kod i filen, kommer den koden också att köras.
i tillägg till dot sourcing måste du också se till att de externa variablerna PowerShell-skriptet är signerat och att fjärrkörning är aktiverat på din maskin.
Dot sourcing kan vara till hjälp om vi behöver få information om något dynamiskt. För de andra alternativen som diskuteras i det här inlägget måste data som lagras i filtyperna ändras manuellt.
1234 |
# här prickar vi källan till den externa variablerna PowerShell-filen. "C:\Test\BlogPosts\ExternalVariables.ps1" skriv-värd $ External_Variable1 $External_Variable2
|
här är vad som finns i filen ExternalVariables.ps1:
#deklaration av externa variabler
$ External_Variable1 = ’Sapien’
$External_Variable2 = ’teknologier’
textfiler
externa variabler kan också lagras i ett antal textfiler och format, till exempel vanlig text i en allmän .txt-fil med cmdlet Get-Content. När vi importerar variabler på detta sätt kör vi ingen kod, så det är inte ett problem om du inte ständigt övervakar filerna för att få information.
följande tre bilder är exempel på olika sätt att lagra information i en enkel textfil:
12345678910111213 |
$ScriptDir = Split-Path $ script: MyInvocation.MyCommand.Sökväg$ScriptDir + = " \ ExternalVariables.txt " # använd get-innehåll för att få alla rader som finns i txt-filerna $External_Variables = Get-Content-Path $ScriptDir #informationen från ExternalVariables kommer in som en array # så för att skriva ut alla strängar i $ - programmet använder vi en foreach loopforeach ($string i $External_Variables){Write-Host $string}
|
här är vad som finns i det Yttrevariabler.txt-fil:
”PowerShell Studio”
”PrimalScript”
”Version minns”
precis som en matris kan vi lagra hashtabeller i textfiler. För att få vårt hash-bord från en textfil måste vi Pipa utmatningen från Get-innehållet till ConvertFrom-StringData cmdlet för att konvertera utmatningen till en hash-tabell.
1234567891011121314 |
$ScriptDir = Split-Path $ script: MyInvocation.MyCommand.Sökväg$ScriptDir + = " \ ExternalVariablesHashTable.txt " # hämta innehållet i den externa Variabeltextfilen# den här filen lagras i plantext och finns inte i något speciellt format # vi använder parametern "raw" här I Get-Content så att när vi får innehållet# i filen så att vår hashtable inte konverteras till ett objekt$program = Get-Content-raw-Path $ScriptDir | ConvertFrom-StringData write-host "`ntype of the variable `$program 'n"$program.GetType () skrivvärd "`nPrinting '$program " $program
|
här är vad som finns i Externvariableshashtable.txt:
Company=Sapien Technologies
Product=PowerShell Studio
att lagra information i en textfil som denna är ett bekvämt sätt att hålla information i ett läsbart format. Textfiler kommer också med fördelen av att inte vara körbar, så om det råkar vara skadlig kod som lagras i en fil som du inte regelbundet hantera det inte kommer att köras.
JSON-fil
det är också möjligt att lagra externa variabler i ett JSON-format. Den enda varning är att vi kommer att behöva återigen rör produktionen av Get-innehåll till en annan cmdlet; men den här gången är det ConvertFrom-Json snarare än ConvertFrom-StringData. För dem som inte känner till JSON eller behöver fräscha upp formatet, besök www.JSON.org.
1234567891011121314151617 |
$ScriptDir = Split-Path $ script: MyInvocation.MyCommand.Sökväg$ScriptDir + = " \jsonfile.json " # få information från JSON-filen # vi skickar utmatningen från Get-Content till ConvertFrom-Json Cmdlet$JsonObject = Get-Content $ScriptDir / ConvertFrom-Json #just nu har vi en array vilket innebär att vi måste indexera#ett element för att använda det$JsonObject.Användare # när indexeras kan vi kalla attributen för elementsWrite-Host "attribut individuellt printed"$JsonObject.Users.Name$JsonObject.Users.Age$JsonObject.Users.City$JsonObject.Users.Country$JsonObject.Users.UserId
|
här är vad som finns i JSON-filen:
{
”användare”:
}
XML-fil
om vi lagrar våra variabler i ett XML-format kan vi lägga till kommentarer till variabelfilen om det behövs. De enda två filformat som vi kommer att prata om i det här inlägget som tillåter kommentarer är XML eller PS1. JSON och vanliga txt-filer tillåter inte kommentarer. För en kortfattad översikt över XML-formatet, besök w3schools.com/xml.
123456789 |
$ScriptDir = Split-Path $ script: MyInvocation.MyCommand.Sökväg$ScriptDir + = " \XMLFile.xml " # läs i all information från våra variabler XML-fil # Vi måste kasta variabeln som när vi lagrar all filinformation i den $XML_Variable = Get-Content-Path $ScriptDir #refererar till Matobjektmatrisen lagrad i Frukostobjektet$XML_Variable.Frukostmeny.Mat / Format-lista
|
här är vad som finns i XML-filen:
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-Berry belgiska våfflor
$8.95
belgiska våfflor täckta med diverse färska bär och vispad grädde
900
när du väljer mellan XML-och JSON-lagringsformat kommer det ner till vilket som är mer bekant. Eftersom den största skillnaden mellan dem är att XML tillåter kommentarer, är det bara en fråga om preferens. Alla dessa alternativ är livskraftiga sätt att lagra information i externa filer för att antingen läsas av ett annat program eller användas av samma program vid ett senare tillfälle. Hur komplicerat, om det är dynamiskt eller inte, och hur mycket information som behöver lagras kommer att diktera formatet som ska användas.
Exportera till filer
precis som att importera information med PowerShell är det också möjligt att exportera information och objekt till en extern fil från programmet vi använder. PowerShell Studio 2018 levereras med utdrag som gör exporterande information mycket enklare—helt enkelt passera sökvägen till den externa filen och objektet till motsvarande exportfunktion och utdraget tar hand om allt annat. Vi kommer att täcka export till filer med hjälp av utdrag i ett framtida blogginlägg.