SAPIEN Technologies

In unseren PowerShell-Community-Foren haben wir kürzlich Fragen erhalten, ob und wie PowerShell-Variablen in externen Dateien gespeichert werden können. Es ist in der Tat möglich, Variablen in externen Dateien für PowerShell zu speichern. Diese externen Variablen können in einer Vielzahl von Dateitypen gespeichert werden. Das Speichern in einer PowerShell-Datei ist eine der einfachsten, da Sie diese Dateien einfach als Punktquelle verwenden können.

Wir werden die folgenden Methoden zum Speichern von Variablen behandeln:

  • Skriptdateien
  • Textdateien
  • JSON-Dateien
  • XML-Dateien

Die in diesem Beitrag gezeigten Beispiele sind ziemlich einfach, aber das bedeutet nicht, dass es nicht möglich ist, ziemlich komplexe Variablen in externen Dateien zu speichern. Wenn Sie mit dem Speichern externer Variablen experimentieren möchten, können Sie die Beispieldateien für diesen Beitrag hier herunterladen.

Skriptdateien

Dot Sourcing ist möglicherweise der einfachste Weg, externe Variablen zu speichern – aber nicht immer der sicherste. Wenn eine Datei dot sourced ist, weisen wir PowerShell an, dieses Skript auszuführen. Wenn die Datei schädlichen Code enthält, wird auch dieser Code ausgeführt.

Zusätzlich zu dot Sourcing müssen Sie sicherstellen, dass das PowerShell-Skript für externe Variablen signiert und die Remoteausführung auf Ihrem Computer aktiviert ist.

Dot Sourcing kann hilfreich sein, wenn wir dynamisch Informationen über etwas erhalten müssen. Für die anderen in diesem Beitrag beschriebenen Optionen müssen die in den Dateitypen gespeicherten Daten manuell geändert werden.

1234

# Hier müssen wir die externe Variablen Powershell-Datei Quelle. "C:\Test\BlogPosts\ExternalVariables.ps1 " Write-Host $External_Variable1 $External_Variable2

Hier ist, was in der Datei ExternalVariables.ps1 enthalten ist:

# Deklaration externer Variablen
$External_Variable1 = ‚Sapien‘
$External_Variable2 = ‚Technologien‘

Textdateien

Externe Variablen können auch in einer Reihe von Textdateien und -formaten gespeichert werden, z. B. Klartext in einem allgemeinen .txt-Datei mit dem Cmdlet Get-Content. Wenn wir Variablen auf diese Weise importieren, führen wir keinen Code aus, daher ist es kein Problem, wenn Sie die Dateien nicht ständig überwachen, um Informationen abzurufen.

Die folgenden drei Bilder sind Beispiele für verschiedene Möglichkeiten, Informationen in einer einfachen Textdatei zu speichern:

12345678910111213

$ ScriptDir = Split-Pfad $script:MyInvocation.Mein Befehl.Pfad$ScriptDir += "\ExternalVariables.txt" # Verwenden Sie get content , um alle Zeilen in den txt-Dateien abzurufen $External_Variables = Get-Content -Path $ScriptDir #Die Informationen aus den ExternalVariables werden als Array angezeigt #Um alle Zeichenfolgen in $program zu drucken, verwenden wir eine foreach loopforeach ($string in $External_Variables){Write-Host $string}

Hier ist, was in den ExternalVariables ist.txt-Datei:

“ PowerShell Studio“
„PrimalScript“
„Versionsrückruf“

Genau wie ein Array können wir Hash-Tabellen in Textdateien speichern. Um unsere Hash-Tabelle aus einer Textdatei abzurufen, müssen wir die Ausgabe von Get-Content an das Cmdlet ConvertFrom-StringData übergeben, um die Ausgabe in eine Hash-Tabelle zu konvertieren.

1234567891011121314

$ ScriptDir = Split-Pfad $script:MyInvocation.Mein Befehl.Pfad$ScriptDir += "\ExternalVariablesHashTable.txt"# Abrufen des Inhalts der externen Variablen Textdatei# Diese Datei wird im Plantext gespeichert und hat kein spezielles Format # Wir verwenden den Parameter "raw" hier in Get-Content, damit beim Abrufen des Inhalts# der Datei unsere Hashtabelle nicht in ein Objekt konvertiert wird$program = Get-Content -raw -Path $ScriptDir | ConvertFrom-StringData write-host "`nTyp der Variablen `$program'n"$program.GetType() write-host "`NPrinting '$Programm" $Programm

Hier ist, was in ExternalVariablesHashTable ist.txt:

Firma =Sapien Technologies
Produkt=PowerShell Studio

Das Speichern von Informationen in einer Textdatei wie dieser ist eine bequeme Möglichkeit, Informationen in einem für Menschen lesbaren Format zu speichern. Textdateien haben auch den Vorteil, dass sie nicht ausführbar sind, wenn also bösartiger Code in einer Datei gespeichert ist, die Sie nicht regelmäßig verwalten, wird sie nicht ausgeführt.

JSON-Datei

Es ist auch möglich, externe Variablen im JSON-Format zu speichern. Die einzige Einschränkung ist, dass wir die Ausgabe von Get-Content erneut an ein anderes Cmdlet weiterleiten müssen; diesmal ist es jedoch ConvertFrom-Json und nicht ConvertFrom-StringData. Für diejenigen, die mit JSON nicht vertraut sind oder das Format auffrischen müssen, besuchen Sie bitte www.JSON.org.

1234567891011121314151617

$ ScriptDir = Split-Pfad $script:MyInvocation.Mein Befehl.Pfad$ScriptDir += "\jsonfile.json"#Abrufen von Informationen aus der JSON-Datei#Die Wir übergeben die Ausgabe von Get-Content an ConvertFrom-Json Cmdlet$JSONObject = Get-Content $ScriptDir | ConvertFrom-Json #Im Moment haben wir ein Array, was bedeutet, dass wir indizieren müssen#ein Element, um es zu verwenden$JSONObject.Benutzer #Bei der Indizierung können wir die Attribute der elementsWrite-Host "Attribute einzeln aufrufen printed"$JsonObject.Users.Name$JsonObject.Users.Age$JsonObject.Users.City$JsonObject.Users.Country$JsonObject.Users.UserId

Hier ist, was in der JSON-Datei ist:

{
“ Benutzer“:
}

XML-Datei

Wenn wir unsere Variablen in einem XML-Format speichern, können wir bei Bedarf Kommentare zur Variablendatei hinzufügen. Die einzigen beiden Dateiformate, über die wir in diesem Beitrag sprechen werden und die Kommentare ermöglichen, sind XML oder PS1. JSON- und normale TXT-Dateien erlauben keine Kommentare. Eine kurze Übersicht über das XML-Format finden Sie unter w3schools.com/xml.

123456789

$ ScriptDir = Split-Pfad $script:MyInvocation.Mein Befehl.Pfad$ScriptDir += "\XMLFile.xml"#Lesen Sie alle Informationen aus unserer Variablen-XML-Datei ein#Wir müssen die Variable wie folgt umwandeln, wenn wir alle Dateiinformationen darin speichern $XML_Variable = Get-Content -Path $ScriptDir #Referenzierung des im Frühstücksobjekt gespeicherten Food-Objektarrays$XML_Variable.Frühstückskarte.Lebensmittel / Format-Liste

Hier ist, was in der XML-Datei ist:


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
900

Berry-Berry Belgische Waffeln
$8.95
Belgische Waffeln mit verschiedenen frischen Beeren und Schlagsahne
900

Bei der Auswahl zwischen XML- und JSON-Speicherformaten kommt es darauf an, welches vertrauter ist. Da der Hauptunterschied zwischen ihnen darin besteht, dass XML Kommentare zulässt, ist dies nur eine Frage der Präferenz. Alle diese Optionen sind praktikable Möglichkeiten, Informationen in externen Dateien zu speichern, die entweder von einem anderen Programm gelesen oder zu einem späteren Zeitpunkt vom selben Programm verwendet werden können. Wie komplex, ob dynamisch oder nicht und wie viele Informationen gespeichert werden müssen, bestimmt das zu verwendende Format.

Exportieren in Dateien

Genau wie beim Importieren von Informationen mit PowerShell ist es auch möglich, Informationen und Objekte aus dem von uns verwendeten Programm in eine externe Datei zu exportieren. PowerShell Studio 2018 enthält Snippets, die den Export von Informationen erheblich vereinfachen — übergeben Sie einfach den Pfad der externen Datei und des Objekts an die entsprechende Exportfunktion, und das Snippet kümmert sich um alles andere. Wir werden den Export in Dateien mit Snippets in einem zukünftigen Blogbeitrag behandeln.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

More: