Ascii in Powershell (wscript.shell)

579
Brtrnd

Ich erstelle ein Skript, das Verknüpfungen zu unserem Archivierungslaufwerk erstellt.
Ich möchte, dass der Dateiname mit einem Omega-Zeichen beginnt. so sortiert windows es immer unten.
Die Ausgabe meines Skripts zeigt das Omega-Zeichen. Die Verbindung, die erstellt wird, ändert dieses Omega jedoch in O (Kapital O). Manuell kann ich eine Verknüpfung erstellen, die mit dem Omega-Zeichen beginnt, also muss sie mit wscript.shell verwandt sein

relevanter Teil des Skripts:

$locatie = $doel+"\Ω_archief "+$file.Name+".lnk" $Shell = New-Object -ComObject ("WScript.Shell") $ShortCut = $Shell.CreateShortcut($locatie) $ShortCut.TargetPath=$file.Fullname $Shortcut.Save() 
0
Ich denke, das Wscript.Shell-Objekt kann nicht mit Unicode arbeiten. Sie können Folgendes versuchen: Erstellen Sie die LNK-Datei mit einem temporären Nicht-Unicode-Namen und verwenden Sie dann Powershell, um sie in Ihren Unicode-Namen umzubenennen. Sunzi vor 7 Jahren 1

1 Antwort auf die Frage

0
JosefZ

Das Problem ist die Save()Methode im WScript.ShellVerknüpfungsobjekt. Es scheint, dass für diesen API-Aufruf ANSINamen erforderlich sind, um die Datei zu erstellen [System.Text.Encoding]::Default.

Hier ist jedoch eine Problemumgehung: Erstellen Sie eine Verknüpfung mit einem eindeutigen ANSINamen und benennen Sie sie dann wie folgt um:

$file = Get-ChildItem $MyInvocation.MyCommand.Path ### mcve $doel = "$env:USERPROFILE\Desktop\Test" ### mcve  $locatie = $doel+"\Ω_archief "+$file.Name+".lnk"  $locatieTemp = $locatie.Replace('\Ω_archief','\OMEGA_archief') $Shell = New-Object -ComObject ("WScript.Shell") $ShortCut = $Shell.CreateShortcut($locatieTemp) $ShortCut.TargetPath=$file.Fullname $Shortcut.Save()  if (Test-Path $locatie) { Remove-Item $locatie }  Move-Item -Path $locatieTemp $locatie  ### or Rename-Item instead of Move-Item: # Rename-Item -Path $locatieTemp $(Split-Path $locatie -Leaf) ### 

Beachten Sie, dass die ersten beiden Zeilen hinzugefügt wurden, um die Regeln für minimal, vollständig und überprüfbar (mcve) zu erfüllen.

So habe ich es gemacht; basierend auf der Antwort von sunzi. Ich habe Ihre als Lösung bezeichnet, um sie schließen zu können. Brtrnd vor 7 Jahren 0