emeriks
Goto Top

Powershell - Zwischenablage - Umlaute

Hi,
ich habe ein PS-Script, welches diverse Informationen über Benutzer aus dem AD liest. Die Daten enthalten auch Umlaute.
Ich speichere diese Daten in einer Variable $Output zwischen.

Wenn ich den Inhalt dieser Variable auf der Console ausgebe
$Output
dann werden die Umlaute korrekt angezeigt.

Übergebe ich den Inhalt der Variable an die Zwischenablage
$Output | Clip
und füge sie anschließend in einem anderen Programm ein (z.B. Notepad, Word, Excel), dann werden die Umlaute als "?" angezeigt.

Im Internet habe ich alles mögliche gefunden bzgl. Ausgabe auf der Console oder in einer Datei. Aber nichts bzgl. Zwischenablage.

Ich gehe bewusst den Weg über die Zwischenablage und nicht den Umweg über eine Datei. Deshalb bitte ich hier nur um Tipps konkret im Zusammenhang mit der Zwischenablage. Danke.

E.

Content-ID: 667838

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

Ausgedruckt am: 21.11.2024 um 13:11 Uhr

CamelCase
Lösung CamelCase 03.09.2024 aktualisiert um 09:39:18 Uhr
Goto Top
Moin,

verwende Set-Clipboard anstatt clip (welches eine uralte Anwendung und kein PowerShell Cmdlet ist)

$output | Set-Clipboard

Was auch funktioniert:

$OutputEncoding = (New-Object System.Text.UnicodeEncoding $False, $False).psobject.BaseObject
$output | clip
emeriks
emeriks 03.09.2024 um 09:36:56 Uhr
Goto Top
Aua!
Ich lege mich besser wieder hin ...
Danke!
mbehrens
mbehrens 03.09.2024 um 09:37:22 Uhr
Goto Top
Zitat von @emeriks:


Übergebe ich den Inhalt der Variable an die Zwischenablage
$Output | Clip
und füge sie anschließend in einem anderen Programm ein (z.B. Notepad, Word, Excel), dann werden die Umlaute als "?" angezeigt.

Wie wäre es stattdessem mit dem cmdlet
Set-Clipboard
Ansonsten muss man die Zeichensätze vorher passend auf OEM 8-Bit oder UTF-16 LE ohne BOM einstellen.
14260433693
14260433693 03.09.2024 aktualisiert um 09:48:10 Uhr
Goto Top
Oder direkt über die jeweilige .NET Klasse
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Clipboard]::SetText($output,1)