highspeed1
Goto Top

PowerShell Encodings in Funktion einbauen

Hallo Forum.

Ich möchte gerne alle Encodings die PowerShell verwalten kann auslesen und in einer Funktion zur Verfügung stellen. Also die Zeile mit ValidateSet soll automatisch alle verfügbaren Values bekommen. Kann man so etwas irgendwie realisieren?

function Out-TEST
{
    Param (
        [Parameter(Mandatory=$true)]  [string] $String,
        [Parameter(Mandatory=$true)]  [string] $FilePath,
        [Parameter(Mandatory=$true)]  [ValidateSet('UTF7','UTF8')] [string] $Encoding  
    )

   $String | Out-File -FilePath $FilePath -Encoding $Encoding
}

Gruß
HighSpeed1

Content-ID: 669920

Url: https://administrator.de/contentid/669920

Ausgedruckt am: 02.12.2024 um 23:12 Uhr

Oskar44
Oskar44 02.12.2024 aktualisiert um 17:22:08 Uhr
Goto Top
Indem du den Typ nicht als [String] sondern als [System.Text.Encoding] definierst.
Für Powershell 7
function Out-TEST
{
    Param (
        [Parameter(Mandatory=$true)][string] $String,
        [Parameter(Mandatory=$true)][string] $FilePath,
        [Parameter(Mandatory=$false)][System.Text.Encoding]$Encoding = [System.Text.Encoding]::Default
    )

   $String | Out-File -FilePath $FilePath -Encoding $Encoding
}
Out-test -string "Hallo" -FilePath test.txt -Encoding ([System.Text.Encoding]::UTF8)  
https://tio.run/##lY/BasMwEETv@ool@OBA5Q8I5NSk5BIasG8hB@GsHYMiFWlMbdp@u2 ...

Das gilt für Powershell 7 weil ab da der Type auf "Encoding" steht, für Powershell 5.1 ist der Type bei out-file noch "String" und da gelten die Einschränkungen wie im Manual beschrieben, siehe zu den möglichen Werten die Manpage zu out-file

Für PS 5
[Parameter(Mandatory=$true)][ValidateSet("ASCII","BigEndianUnicode","Default","OEM","String","Unicode","Unknown","UTF7","UTF8","UTF32")][string]$Encoding  
Kraemer
Kraemer 02.12.2024 um 17:04:13 Uhr
Goto Top
Moin,

Zitat von @HighSpeed1:

Ich möchte gerne alle Encodings die PowerShell verwalten kann auslesen und in einer Funktion zur Verfügung stellen. Also die Zeile mit ValidateSet soll automatisch alle verfügbaren Values bekommen. Kann man so etwas irgendwie realisieren?

das wird nicht so funktionieren, wie du dir das vorstellst. Das "encoding" ist in Powershell nicht konsistent - das heißt nicht jede Funktion beherrscht jedes mögliche encoding.

Mit
[System.Text.Encoding]::GetEncodings()
kannst du dir mal eine Liste ausgeben lassen und dann mal testen.