Import-Clixml

Importiert eine CLIXML-Datei und erstellt entsprechende Objekte in PowerShell.

Syntax

Import-Clixml
      [-Path] <String[]>
      [-IncludeTotalCount]
      [-Skip <UInt64>]
      [-First <UInt64>]
      [<CommonParameters>]
Import-Clixml
      -LiteralPath <String[]>
      [-IncludeTotalCount]
      [-Skip <UInt64>]
      [-First <UInt64>]
      [<CommonParameters>]

Beschreibung

Das Import-Clixml Cmdlet importiert Objekte, die in eine CLI-XML-Datei (Common Language Infrastructure) serialisiert wurden. Eine wertvolle Verwendung von Import-Clixml Windows-Computern besteht darin, Anmeldeinformationen und sichere Zeichenfolgen zu importieren, die mit sicherem XML Export-Clixmlexportiert wurden. Beispiel Nr. 2 zeigt, wie Sie ein sicheres Anmeldeinformationsobjekt importieren Import-Clixml .

Die CLIXML-Daten werden wieder in PowerShell-Objekte deserialisiert. Die deserialisierten Objekte sind jedoch keine Liveobjekte. Sie sind eine Momentaufnahme der Objekte zum Zeitpunkt der Serialisierung. Die deserialisierten Objekte enthalten Eigenschaften, jedoch keine Methoden.

Die TypeNames-Eigenschaft enthält den ursprünglichen DeserializedTypnamen mit dem Präfix . Beispiel Nr. 3 zeigt die TypeNames-Eigenschaft eines deserialisierten Objekts an.

Import-Clixml verwendet das Bytereihenfolgenzeichen (BOM), um das Codierungsformat der Datei zu erkennen. Wenn die Datei keine BOM aufweist, wird davon ausgegangen, dass die Codierung UTF8 ist.

Weitere Informationen zu CLI finden Sie unter Sprachunabhängigkeit.

Beispiele

Beispiel 1: Importieren einer serialisierten Datei und Erneutes Erstellen eines Objekts

In diesem Beispiel wird das Export-Clixml Cmdlet verwendet, um eine serialisierte Kopie der von Get-Processihnen zurückgegebenen Prozessinformationen zu speichern. Import-Clixml ruft den Inhalt der serialisierten Datei ab und erstellt ein Objekt neu, das in der $Processes Variablen gespeichert ist.

Get-Process | Export-Clixml -Path .\pi.xml
$Processes = Import-Clixml -Path .\pi.xml

Beispiel 2: Importieren eines sicheren Anmeldeinformationsobjekts

In diesem Beispiel können Sie bei einer Anmeldeinformation, die Sie in der $Credential Variablen gespeichert haben, durch Ausführen des Get-Credential Cmdlets das Export-Clixml Cmdlet ausführen, um die Anmeldeinformationen auf dem Datenträger zu speichern.

Wichtig

Export-Clixml exportiert nur verschlüsselte Anmeldeinformationen unter Windows. Auf Nicht-Windows-Betriebssystemen wie macOS und Linux werden Anmeldeinformationen in Nur-Text exportiert.

$Credxmlpath = Join-Path (Split-Path $Profile) TestScript.ps1.credential
$Credential | Export-Clixml $Credxmlpath
$Credxmlpath = Join-Path (Split-Path $Profile) TestScript.ps1.credential
$Credential = Import-Clixml $Credxmlpath

Das Export-Clixml Cmdlet verschlüsselt Anmeldeinformationsobjekte mithilfe der Windows Data Protection-API. Die Verschlüsselung stellt sicher, dass nur Ihr Benutzerkonto den Inhalt des Anmeldeinformationsobjekts entschlüsseln kann. Die exportierte CLIXML Datei kann nicht auf einem anderen Computer oder von einem anderen Benutzer verwendet werden.

Im Beispiel wird die Datei, in der die Anmeldeinformationen gespeichert werden, durch TestScript.ps1.credentialdargestellt. Ersetzen Sie TestScript durch den Namen des Skripts, mit dem Sie die Anmeldeinformationen laden.

Sie senden das Anmeldeinformationsobjekt an die Pipeline Export-Clixmlnach unten, und speichern es im Pfad, $Credxmlpathden Sie im ersten Befehl angegeben haben.

Führen Sie die letzten beiden Befehle aus, um die Anmeldeinformationen automatisch in Ihr Skript zu importieren. Führen Sie den Befehl aus Import-Clixml , um das gesicherte Anmeldeinformationsobjekt in Ihr Skript zu importieren. Durch diesen Import wird das Risiko beseitigt, dass Nur-Text-Kennwörter in Ihrem Skript verfügbar sind.

Beispiel 3: Überprüfen der TypeNames-Eigenschaft eines deserialisierten Objekts

In diesem Beispiel wird gezeigt, wie ein Objekt importiert wird, das als CLIXML-Daten gespeichert ist. Die Daten werden wieder in ein PowerShell-Objekt deserialisiert. Das deserialisierte Objekt ist jedoch kein Liveobjekt. Sie sind eine Momentaufnahme der Objekte zum Zeitpunkt der Serialisierung. Die deserialisierten Objekte enthalten Eigenschaften, jedoch keine Methoden.

$original = [pscustomobject] @{
    Timestamp = Get-Date
    Label     = 'Meeting event'
}
$original | Add-Member -MemberType ScriptMethod -Name GetDisplay -Value {
    '{0:yyyy-MM-dd HH:mm} {1}' -f $this.Timestamp, $this.Label
}
$original | Get-Member -MemberType ScriptMethod

TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
Label       NoteProperty string Label=Meeting event
Timestamp   NoteProperty System.DateTime Timestamp=1/31/2024 2:27:59 PM
GetDisplay  ScriptMethod System.Object GetDisplay();

$original | Export-Clixml -Path event.clixml
$deserialized = Import-CliXml -Path event.clixml
$deserialized | Get-Member

TypeName: Deserialized.System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
Label       NoteProperty string Label=Meeting event
Timestamp   NoteProperty System.DateTime Timestamp=1/31/2024 2:27:59 PM

Beachten Sie, dass der Typ des Objekts in $original "System.Management.Automation.PSCustomObject" lautet, der Typ des Objekts jedoch $deserialized "Deserialized.System.Management.Automation.PSCustomObject". Außerdem fehlt die GetDisplay() Methode im deserialisierten Objekt.

Parameter

-First

Ruft nur die angegebene Anzahl von Objekten ab. Geben Sie die Anzahl der abzurufenden Objekte an.

Typ:UInt64
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-IncludeTotalCount

Meldet die Gesamtanzahl der Objekte im Dataset, gefolgt von den ausgewählten Objekten. Wenn das Cmdlet die Gesamtanzahl nicht ermitteln kann, wird die Unbekannte Gesamtanzahl angezeigt. Die ganze Zahl weist eine Accuracy-Eigenschaft auf, die die Zuverlässigkeit des Gesamtanzahlswerts angibt. Der Wert der Genauigkeit reicht von 0.0 wo aus 1.0 0.0 bedeutet, dass das Cmdlet die Objekte nicht zählen konnte, bedeutet, 1.0 dass die Anzahl genau ist, und ein Wert zwischen 0.0 und 1.0 gibt eine immer zuverlässigere Schätzung an.

Typ:SwitchParameter
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

-LiteralPath

Gibt den Pfad zu den XML-Dateien an. Im Gegensatz zu Path wird der Wert des LiteralPath-Parameters genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.

Typ:String[]
Aliase:PSPath, LP
Position:Named
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-Path

Gibt den Pfad zu den XML-Dateien an.

Typ:String[]
Position:0
Standardwert:None
Erforderlich:True
Pipelineeingabe akzeptieren:True
Platzhalterzeichen akzeptieren:False

-Skip

Ignoriert die angegebene Anzahl an Objekten und ruft anschließend die übrigen Objekte ab. Geben Sie die Anzahl der zu überspringenden Objekte an.

Typ:UInt64
Position:Named
Standardwert:False
Erforderlich:False
Pipelineeingabe akzeptieren:False
Platzhalterzeichen akzeptieren:False

Eingaben

String

Sie können eine Zeichenfolge mit einem Pfad zu diesem Cmdlet weiterleiten.

Ausgaben

PSObject

Dieses Cmdlet gibt Objekte zurück, die aus den gespeicherten XML-Dateien deserialisiert wurden.

Hinweise

Wenn Sie für einen Parameter mehrere Werte angeben, verwenden Sie Kommas zur Trennung der Werte. Beispiel: <parameter-name> <value1>, <value2>.