about_PowerShell_Config

Kurze Beschreibung

Configuration files for PowerShell, replacing Registry configuration.

Lange Beschreibung

Die powershell.config.json Datei enthält Konfigurationseinstellungen für PowerShell. PowerShell lädt diese Konfiguration beim Start. Die Einstellungen können auch zur Laufzeit geändert werden. Zuvor wurden diese Einstellungen in der Windows-Registrierung für PowerShell gespeichert, sind jetzt aber in einer Datei enthalten, um die Konfiguration unter macOS und Linux zu aktivieren.

Zusammenfassung der Einstellungen

Die powershell.config.json Datei kann die folgenden Schlüssel enthalten:

  • DisableImplicitWinCompat
  • WindowsPowerShellCompatibilityModuleDenyList
  • WindowsPowerShellCompatibilityNoClobberModuleList
  • ExperimentalFeatures
  • LogChannels
  • LogIdentity
  • LogKeywords
  • LogLevel
  • Microsoft.PowerShell:ExecutionPolicy
  • PSModulePath
  • PowerShellPolicies
    • ExecutionPolicy
    • ConsoleSessionConfiguration
    • ModuleLogging
    • ProtectedEventLogging
    • ScriptBlockLogging
    • ScriptExecution
    • Transcription
    • UpdatableHelp

Nicht alle Schlüssel gelten für alle Plattformen. Der PowerShellPolicies Schlüssel enthält Unterschlüssel, die die von Window Gruppenrichtlinie verwalteten Einstellungen spiegeln. Diese Unterschlüssel gelten auch für alle Plattformen, wenn sie auf der Stammebene der JSON-Datei definiert sind.

Warnung

Nicht erkannte Schlüssel oder ungültige Werte in der Konfigurationsdatei werden ignoriert. Wenn die powershell.config.json Datei ungültige JSON-Dateien enthält, kann PowerShell keine interaktive Sitzung starten. In diesem Fall müssen Sie die Konfigurationsdatei korrigieren.

Konfigurationsbereich

Konfigurationseinstellungen können für alle Benutzer oder auf benutzerindividueller Ebene definiert werden.

AllUsers -Konfiguration (shared)

Eine powershell.config.json Datei im $PSHOME Verzeichnis definiert die Konfiguration für alle PowerShell-Sitzungen, die über diese PowerShell-Installation ausgeführt werden.

Hinweis

Der $PSHOME Speicherort ist als dasselbe Verzeichnis wie die ausführende System.Management.Automation.dll Assembly definiert. Dies gilt auch für gehostete PowerShell SDK-Instanzen.

CurrentUser-Konfigurationen (pro Benutzer)

Sie können PowerShell auch benutzerbezogen konfigurieren, indem Sie die Datei im Konfigurationsverzeichnis des Benutzerbereichs platzieren. Das Benutzerkonfigurationsverzeichnis finden Sie plattformübergreifend mit dem Befehl Split-Path $PROFILE.CurrentUserCurrentHost.

Bereichsrangfolge

Unter Windows haben von Windows verwaltete Einstellungen Gruppenrichtlinie Vorrang vor einstellungen in der Konfigurationsdatei. Gruppenrichtlinie ist auf Nicht-Windows-Plattformen nicht vorhanden.

Nach Gruppenrichtlinie haben die auf der AllUsers-Ebene definierten Einstellungen Vorrang vor den Einstellungen, die für die CurrentUser-Ebene definiert sind.

Windows-spezifische Einstellungen

Die folgenden Einstellungen gelten nur für Windows-Plattformen.

  • DisableImplicitWinCompat
  • WindowsPowerShellCompatibilityModuleDenyList
  • WindowsPowerShellCompatibilityNoClobberModuleList
  • ExecutionPolicy
  • PowerShellPolicies

DisableImplicitWinCompat

Wenn auf truefestgelegt ist, deaktiviert diese Einstellung das Feature Windows PowerShell Kompatibilität. Windows PowerShell Kompatibilität ermöglicht PowerShell 7 das Laden Windows PowerShell 5.1-Module im Kompatibilitätsmodus.

Weitere Informationen finden Sie unter about_Windows_PowerShell_Compatibility.

WindowsPowerShellCompatibilityModuleDenyList

Diese Einstellung ist ein Array von Modulnamen, die Sie von der Teilnahme an der Windows PowerShell Kompatibilitätsfunktion ausschließen möchten.

For more information, see about_Windows_PowerShell_Compatibility.

WindowsPowerShellCompatibilityNoClobberModuleList

Diese Einstellung ist ein Array von Modulnamen, das nicht durch Laden der Windows PowerShell 5.1-Version des Moduls geklebt werden sollte.

For more information, see about_Windows_PowerShell_Compatibility.

ExecutionPolicy

Wichtig

Diese Konfiguration gilt nur für Windows-Plattformen.

Konfiguriert die Ausführungsrichtlinie für PowerShell-Sitzungen und bestimmt, welche Skripts ausgeführt werden können. Standardmäßig verwendet PowerShell die vorhandene Ausführungsrichtlinie.

Für AllUsers-Konfigurationen legt die Ausführungsrichtlinie LocalMachine fest. Für CurrentUser-Konfigurationen wird die CurrentUser-Ausführungsrichtlinie festgelegt.

Im folgenden Beispiel wird die Ausführungsrichtlinie von PowerShell auf RemoteSignedfestgelegt.

{
  "Microsoft.PowerShell:ExecutionPolicy": "RemoteSigned"
}

Weitere Informationen finden Sie unter about_Execution_Policies.

PowerShellPolicies

Windows verfügt über mehrere Einstellungen, die von Gruppenrichtlinie verwaltet werden können. Normalerweise werden diese Einstellungen in der Windows-Registrierung gespeichert. Diese Einstellung kann auch in der powershell.config.json Datei definiert werden.

Das PowerShellPolicies ist ein JSON-Objekt, das Schlüssel-Wert-Paare für die verschiedenen Richtlinieneinstellungen enthält. Diese Richtlinieneinstellungen können auch auf der Stammebene der JSON-Datei außerhalb des PowerShellPolicies Objekts aufgeführt werden. Diese Einstellung kann die folgenden Unterschlüssel enthalten:

  • ConsoleSessionConfiguration
  • ModuleLogging
  • ProtectedEventLogging
  • ScriptBlockLogging
  • ScriptExecution
  • Transcription
  • UpdatableHelp

Die ScriptExecution Einstellung wird verwendet, um die PowerShell-Ausführungsrichtlinie festzulegen. Dies hat Vorrang vor der oben beschriebenen ExecutionPolicy Einstellung.

Beispiel:

{
    "PowerShellPolicies": {
        "ScriptExecution": {
            "ExecutionPolicy": "RemoteSigned"
        }
    }
}

Beschreibungen der anderen Richtlinieneinstellungen finden Sie in den Beschreibungen im Abschnitt Allgemeine Konfigurationseinstellungen .

Unter Windows sucht PowerShell nach den Einstellungen in der Registrierung. Alle Einstellungen in der Registrierung haben Vorrang. Als Nächstes liest PowerShell die JSON-Konfiguration. Alle Einstellungen, die unter PowerShellPoliciesgefunden und nicht in der Registrierung definiert sind, haben Vorrang vor Einstellungen, die auf der Stammebene der JSON-Konfiguration gefunden werden.

Weitere Informationen finden Sie unter about_Group_Policy_Settings.

Einstellungen für Nicht-Windows-Plattformen

Die folgenden Einstellungen gelten nur für Linux- und macOS-Plattformen.

Die folgenden Schlüssel werden verwendet, um die PowerShell-Protokollierung für Linux und macOS zu konfigurieren.

  • LogChannels
  • LogIdentity
  • LogKeywords
  • LogLevel

Eine vollständige Beschreibung der PowerShell-Protokollierung für Nicht-Windows-Systeme finden Sie unter about_Logging_Non-Windows.

Allgemeine Konfigurationseinstellungen

Die folgenden Einstellungen sind auf allen unterstützten Plattformen verfügbar.

  • ConsoleSessionConfiguration
  • ExperimentalFeatures
  • ModuleLogging
  • ProtectedEventLogging
  • PSModulePath
  • ScriptBlockLogging
  • ScriptExecution
  • Transcription
  • UpdatableHelp

ConsoleSessionConfiguration

Diese Einstellung gibt die Sitzungskonfiguration an, die für alle PowerShell-Sitzungen verwendet werden soll. Dies kann ein beliebiger Endpunkt sein, der auf dem lokalen Computer registriert ist, einschließlich der PowerShell-Standardremotingendpunkte oder ein benutzerdefinierter Endpunkt mit bestimmten Benutzerrollenfunktionen.

Dieser Schlüssel enthält zwei Unterschlüssel:

  • EnableConsoleSessionConfiguration – Um Sitzungskonfigurationen zu aktivieren, legen Sie den Wert auf fest true. Standardmäßig ist dieser Wert auf false festgelegt.

  • ConsoleSessionConfigurationName – Gibt den Namen des Konfigurationsendpunkts an, in dem PowerShell ausgeführt wird. Standardmäßig ist keine Sitzung definiert.

{
  "ConsoleSessionConfiguration": {
    "EnableConsoleSessionConfiguration": false,
    "ConsoleSessionConfigurationName" : []
  }
}

Weitere Informationen finden Sie unter about_Session_Configurations.

ExperimentalFeatures

Die Namen der experimentellen Features, die in PowerShell aktiviert werden sollen. Der Standardwert ist ein leeres Array.

Im folgenden Beispiel werden die experimentellen Features PSCommandNotFoundSuggestion und PSSubsystemPluginModel aktiviert, wenn PowerShell gestartet wird.

Beispiel:

{
  "ExperimentalFeatures": [
    "PSCommandNotFoundSuggestion",
    "PSSubsystemPluginModel"
  ]
}

Weitere Informationen zu experimentellen Features finden Sie unter Verwenden experimenteller Features.

ModuleLogging

Diese Einstellung steuert das Verhalten der Protokollierung für PowerShell-Module. Die Einstellung enthält zwei Unterschlüssel:

  • EnableModuleLogging - to enable session configurations, set the value to true. Wenn diese Option aktiviert ist, werden Pipelineausführungsereignisse für Mitglieder der angegebenen Module in den PowerShell-Protokolldateien aufgezeichnet.
  • ModuleNames – Gibt den Namen der Module an, die protokolliert werden sollen.

Beispiel:

{
  "ModuleLogging": {
    "EnableModuleLogging": true,
    "ModuleNames" : [
        "PSReadLine",
        "PowerShellGet"
    ]
  }
}

ProtectedEventLogging

Mit dieser Einstellung können Sie die geschützte Ereignisprotokollierung konfigurieren. Die Einstellung enthält zwei Unterschlüssel:

  • EnableProtectedEventLogging – Wenn Sie diese Richtlinieneinstellung aktivieren, verwenden Komponenten, die sie unterstützen, das von Ihnen bereitgestellte Zertifikat, um Protokolldaten zu verschlüsseln, bevor sie in das Protokoll geschrieben werden. Daten werden mit dem CMS-Standard (Cryptographic Message Syntax) verschlüsselt. Sie können diese verschlüsselten Nachrichten entschlüsseln Unprotect-CmsMessage , wenn Sie Zugriff auf den privaten Schlüssel des Zertifikats haben.
  • EncryptionCertificate – Stellt eine Liste der Namen der Zertifikate bereit, die für die Verschlüsselung verwendet werden sollen.

Beispiel:

{
  "ProtectedEventLogging": {
    "EnableProtectedEventLogging": false,
    "EncryptionCertificate": [
      "Joe"
    ]
  }
}

PSModulePath

Überschreibt die PSModulePath Einstellungen für diese PowerShell-Sitzung. Wenn die Konfiguration für den aktuellen Benutzer bestimmt ist, legt den CurrentUser-Modulpfad fest. Wenn die Konfiguration für alle Benutzer bestimmt ist, legt den Pfad des AllUsers-Moduls fest.

Warnung

Wenn Sie hier einen AllUsers - oder CurrentUser-Modulpfad konfigurieren, wird der bereichsbezogene Installationsspeicherort für PowerShellGet-Cmdlets wie Install-Module nicht geändert. Diese Cmdlets verwenden immer die Standardmodulpfade .

Wenn kein Wert festgelegt ist, verwendet PowerShell den Standardwert für die jeweilige Modulpfadeinstellung. Weitere Informationen zu diesen Standardwerten finden Sie unter about_Modules.

Diese Einstellung ermöglicht die Verwendung von Umgebungsvariablen, indem sie zwischen % Zeichen, z. B "%HOME%\Documents\PowerShell\Modules". , auf die gleiche Weise wie die Windows-Befehlsshell einbetten. Diese Syntax gilt auch für Linux und macOS. Weiter unten finden Sie Beispiele dafür.

Dieses Beispiel zeigt eine PSModulePath Konfiguration für eine Windows-Umgebung:

{
  "PSModulePath": "C:\\Program Files\\PowerShell\\6\\Modules"
}

Dieses Beispiel zeigt eine PSModulePath Konfiguration für eine macOS- oder Linux-Umgebung:

{
  "PSModulePath": "/opt/powershell/6/Modules"
}

In diesem Beispiel wird das Einbetten einer Umgebungsvariablen in eine PSModulePath Konfiguration veranschaulicht. Beachten Sie, dass diese Syntax mithilfe der HOME Umgebungsvariablen und des / Verzeichnistrennzeichens unter Windows, macOS und Linux funktioniert.

{
  "PSModulePath": "%HOME%/Documents/PowerShell/Modules"
}

In diesem Beispiel wird eine Umgebungsvariable verwendet, die nur unter macOS und Linux funktioniert:

{
  "PSModulePath": "%XDG_CONFIG_HOME%/powershell/Modules"
}

Hinweis

PowerShell-Variablen können nicht in PSModulePath Konfigurationen eingebettet werden. PSModulePath bei Konfigurationen unter Linux und macOS wird die Groß-/Kleinschreibung beachtet. Eine PSModulePath Konfiguration muss gültige Verzeichnistrennzeichen für die Plattform verwenden. Unter macOS und Linux bedeutet /dies . Unter Windows funktionieren sowohl als \ auch/.

ScriptBlockLogging

Diese Einstellung steuert die Protokollierung aller PowerShell-Skripteingaben. Diese Einstellung enthält zwei Unterschlüssel:

  • EnableScriptBlockLogging - Wenn Sie diese Richtlinieneinstellung aktivieren, protokolliert PowerShell die Verarbeitung von Befehlen, Skriptblöcken, Funktionen und Skripts, unabhängig davon, ob sie interaktiv oder durch Automatisierung aufgerufen werden.
  • EnableScriptBlockInvocationLogging – aktiviert die Protokollierung von Start- und Stoppereignissen von Skriptblocks.

Beispiel:

"ScriptBlockLogging": {
  "EnableScriptBlockInvocationLogging": true,
  "EnableScriptBlockLogging": false
}

Transkription

Mit dieser Richtlinieneinstellung können Sie die Eingabe und Ausgabe von PowerShell-Befehlen in textbasierten Transkripten erfassen. Wenn Sie diese Richtlinieneinstellung aktivieren, aktiviert PowerShell die Transkription für alle PowerShell-Sitzungen.

Diese Einstellung steuert die Funktionsweise der Transkription in PowerShell. Diese Einstellung enthält drei Unterschlüssel:

  • EnableTranscripting – Wenn diese Einstellung aktiviert ist, erstellt PowerShell Transkriptionsprotokolldateien am konfigurierten Speicherort.
  • EnableInvocationHeader – Standardmäßig enthält PowerShell einen Header am Anfang der Transkriptionsprotokolldatei. Sie können den Header mit dieser Einstellung deaktivieren.
  • OutputDirectory – Mit dieser Einstellung können Sie Transkriptionsprotokolldateien an einem zentralen Speicherort anstelle des Standardspeicherorts erfassen.

Beispiel:

{
    "Transcription": {
        "EnableTranscripting": true,
        "EnableInvocationHeader": true,
        "OutputDirectory": "c:\\tmp"
      }
}

Weitere Informationen finden Sie unter Start-Transkript.

UpdatableHelp

Mit dieser Richtlinieneinstellung können Sie den Standardwert des SourcePath-Parameters für das Update-Help Cmdlet festlegen. Dieser Standardwert kann überschrieben werden, indem mithilfe des SourcePath-Parameters ein anderer Wert angegeben wird.

Beispiel:

{
    "UpdatableHelp": {
      "DefaultSourcePath": "f:\\temp"
    }
}