Wie führt man ein PowerShell-Skript über ein Konsolenfenster aus, wenn der Suchpfad Å, Ä oder Ö enthält?
4572
Samir
Wenn ich mit der rechten Maustaste auf eine script.ps1Datei klicke und "Mit PowerShell ausführen" auswähle, wird ein PS-Konsolenfenster angezeigt, und mein Skript kann aus irgendeinem Grund nicht ausgeführt werden. Ich erhalte eine Fehlermeldung, kann die Nachricht jedoch nicht wirklich lesen, da sich das Fenster unmittelbar nach dem Auftreten des Fehlers schließt.
Ich möchte also ein neues PowerShell-Konsolenfenster öffnen, zur Skriptdatei navigieren, sie ausführen und hoffentlich dieses Mal den Luxus bekommen, die dumme Fehlermeldung zu lesen. Wie führe ich das Skript dann aus dem Konsolenfenster aus?
Betriebssystemversion: Windows 8.0
PS-Version: 3.0
Einfach eintippen script.ps1oder der Vorschlag ".\script.ps1"macht einfach nichts.
Ich vermute, es muss also eine Art Befehl erhalten? Das Skript ist sehr einfach, es soll neue Ordner erstellen und diese durch Lesen der Export.txtDatei benennen .
Hinweis! Bitte beachten Sie, dass die obige Fehlermeldung (Screenshot) nicht mit der Ausführung des eigentlichen Skripts zusammenhängt. Ich kann das Skript nur ausführen, indem Sie mit der rechten Maustaste auf die Skriptdatei im Explorer klicken und "Mit PowerShell ausführen" auswählen. Der Fehler, den ich beim Ausführen erhalte, ist jedoch ein anderer als der oben gezeigte.
Aktualisieren! Siehe meinen zweiten Kommentar unten. Für Pfade wie C:\test\script.ps1es funktioniert mit arbeiten .\script.ps1. Ich brauche immer noch Hilfe beim Ausführen der PS-Skriptdatei, wenn der Pfad zur Skriptdatei unkonventionelle Buchstaben wie Å, Ä und Ö enthält.
Update - Å, Ä und Ö bricht PS
Wie gesagt, ich habe Probleme mit diesen Charakteren in PS. Deshalb dachte ich zuerst, ich würde es nicht richtig machen. Ich gebe Ihnen hier zwei Beispiele, um dies zu demonstrieren.
Offensichtlich läuft das Skript. Es werden jedoch nur 116 Ordner aus den insgesamt 245 Ordnern erstellt, die erstellt werden sollen. Das kann mit dem Skript selbst zu tun haben. Es werden Zeilen übersprungen wie 002 Långflonund 003 Källegrafsrösweil sie die Buchstaben Å, Ä und / oder Ö enthalten. Irgendwelche Ideen? Der Punkt ist jedoch, dass das Skript wie erwartet im PS-Konsolenfenster ausgeführt wird.
Ausführen des gleichen PS-Skripts mit Å, Ä und Ö
Ich habe absichtlich ein Ä in den Ordnernamen geworfen. So testwurde in umbenannt täst. Ich habe die Skriptdatei mit diesen Änderungen aktualisiert, und dies ist jetzt mein Skript.
PS C:\täst> .\script.ps1 get-content : Cannot find path 'C:\täst\Export.txt' because it does not exist. At C:\täst\script.ps1:4 char:1 + get-content $txtFile | %{ + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (C:\täst\Export.txt:String) [Get-Content], ItemNotFoun + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand PS C:\täst>
Der Pfad 'C: \ täst \ Export.txt' kann nicht gefunden werden, da er nicht vorhanden ist.
Wie Sie sehen, versucht es, einen Pfad zu finden, der nicht vorhanden ist. Punkt bewiesen. Charaktere Å, Ä und Ö brechen PS! Aber warum? Was mache ich so falsch? ...
Verwenden Sie keine Anführungszeichen, wenn Sie `. \ Script.ps1` eingeben. Es würde Ihren Befehl nur wiederholen.
Ashtray vor 10 Jahren
0
`. \ Script.ps1` wird es also ausführen? Aber sagt `type". \ Script.ps1 "` und das bedeutet, die Anführungszeichen einzuschließen, nein?
Samir vor 10 Jahren
0
Oh! So funktioniert es dann **. Vielen Dank! Es funktioniert einfach nicht ** mit meinem eigenen Suchpfad. Ich habe ein "\\ FILESERVER \ path \ path \ path" als "Z:" - Laufwerk angehängt. Es enthält den Brief ** Ä ** und das ist ein Grund genug für PS, nicht zu arbeiten? Es scheint diese Buchstaben überhaupt nicht zu mögen. Das obige Skript möchte nicht einmal neue Ordner erstellen, wenn der Name die Buchstaben Å, Ä und Ö enthält.
Samir vor 10 Jahren
1
Ich bin mir also nicht wirklich sicher, ob das meine Frage beantwortet, irgendwie ... funktioniert es mit `. \ Dateiname.ps1`, solange der Pfad keine funky Zeichen wie ** Ä ** enthält.
Samir vor 10 Jahren
0
Sie finden diesen Technet-Artikel möglicherweise hilfreich: http://technet.microsoft.com/de-de/library/ee176949.aspx
wmz vor 10 Jahren
0
@Sammy Der Grund, warum das Skript einige der Ordner nicht erstellt, ist, dass ich das ursprüngliche Skript so erstellt habe, dass es nur mit den Namen übereinstimmt, die Sie zuerst angegeben haben (dh 3 Ziffern, Leerzeichen und dann ein Zeichen). In der aktualisierten Antwort auf Ihre ursprüngliche Frage finden Sie ein Muster, das allen Ihren Namen entspricht. http://superuser.com/questions/722372/how-to-create-multiple-folders-and-name-them-by-reading-lines-from-text-file/722379#722379
Martin vor 10 Jahren
0
@Martin Ja, ich kann bestätigen, dass Ihr Skript jetzt auch auf diesem Windows 8-Computer funktioniert. Aber ich bin hier etwas verwirrt ... Ich habe gestern Ihr Originalskript auf meinem Vista-Computer getestet und es hat funktioniert. Ich bin mir nicht sicher, ob es alle Ordner erstellt hat, aber es hat eine ganze Menge davon erstellt, sodass ich nicht gezählt habe. Welchen Unterschied macht es, wenn es sich um Windows Vista oder Windows 8 handelt? ... Auch ist dies zumindest teilweise ein Problem mit der Codierung oder überhaupt nicht? Siehe meine Kommentare zur Antwort von UnlimitedInfinity unten.
Samir vor 10 Jahren
0
@Sammy, das Problem mit europäischen Zeichen wird durch die Kodierung Ihres Skripts in ANSI gelöst. Sie müssen ein anderes "Übereinstimmungsmuster" verwenden, um die Dateinamen aus Ihrer Eingabe zu extrahieren, wie in Martins Antwort (im anderen Beitrag).
UnlimitedInfinity vor 10 Jahren
0
Martins neues Skript funktioniert. Es funktioniert jedoch von "C: \ test" und es funktioniert von "Z: \ test", aber es funktioniert nicht von "Z: \ S_Värmland \ test". Das C ist mein lokales Festplattenlaufwerk und Z ist ein Netzwerkspeicherort (`\\ FILESERVER`), der als Z-Laufwerk angehängt ist. Es sieht also so aus, als ob ich recht mit dem Suchpfadproblem habe, es mag den ** Ä ** im Suchpfad nicht?
Samir vor 10 Jahren
0
@Sammy, führen Sie `type theNewScriptName` aus. Sehen Sie einen Umlaut oder zwei "seltsame" Zeichen? Sind Sie also sicher, dass Sie das Skript in ANSI gespeichert haben?
UnlimitedInfinity vor 10 Jahren
0
3 Antworten auf die Frage
3
UnlimitedInfinity
Hier scheint es Ihnen gelungen zu sein, den Verzeichnisnamen mit UTF-8 (Zeichensatz) einzugeben:
$folder="C:\täst";
Der Umlaut wird im Skript als zwei Zeichen gespeichert. Deshalb sehen Sie es in der Fehlermeldung als zwei Zeichen:
get-content : Cannot find path 'C:\täst\Export.txt' because it does not exist.
Genau wie hast du "absichtlich ein Ä in den Ordnernamen geworfen"? Sie müssen das als ASCII tun, nicht als UTF-8.
Zeigen Sie Ihr Skript mit dem Befehl "type" an. Ich bin mir sicher, dass Sie die UTF-Darstellung wie in der Fehlermeldung sehen werden. Ihr Editor zeigt die Umlaute wie erwartet an. Der Typbefehl zeigt die Umlaute [höchstwahrscheinlich] als zwei Zeichen wie in der Fehlermeldung an.
Stellen Sie sicher, dass Ihr Editor reines ASCII oder ANSI speichert.
Mein "Editor" war Windows Explorer. Wenn das hilft? Ich habe den Ordner im Explorer einfach von "test" in "täst" umbenannt. Das Skript wurde mit Notepad ++ mit UTF ohne Stückliste gespeichert.
Samir vor 10 Jahren
0
@Sammy Verwenden Sie ANSI, nicht UTF. Ziemlich oft ** Speichern Sie niemals ein Skript in UTF. UTF für Ihre Daten, ANSI für Ihr Scripting.
UnlimitedInfinity vor 10 Jahren
0
Wie stellen Sie sicher, dass in Notepad ++ "reines ASCII" verwendet wird? Ich kann nur ANSI erhalten, und wenn ich es verstehe, handelt es sich tatsächlich um eine Microsoft-Version von ASCII. Aber ich könnte mich irren.
Samir vor 10 Jahren
0
@Sammy ANSI und ASCII sind so ähnlich, dass ich sie immer als gleich angesehen habe. Ich habe gerade Google gefragt und es gibt einige Unterschiede: http://www.differencebetween.net/technology/web-applications/difference-between-ansi-and-ascii/ Die Antwort hat jetzt beides.
UnlimitedInfinity vor 10 Jahren
0
@Sammy Um als ANSI in Notepad ++ zu speichern, klicken Sie auf das Menü "Encoding" -> "Encode in ANSI".
Martin vor 10 Jahren
1
Dies war insofern hilfreich, als ich jetzt das PS-Skript zur Erstellung von 237 Ordnern (von insgesamt 245) habe. Einige von ihnen werden noch übersprungen. Ich weiß nicht warum. Aber die Liste in UTF-8 (mit BOM) und das Skript in ANSI (ASCII) zu haben, hat geholfen.
Samir vor 10 Jahren
0
Die vollständige Liste der Elemente in der Liste finden Sie unter http://pastebin.com/SNde4bBN
Samir vor 10 Jahren
0
Die Elemente, die von der Liste übersprungen werden, sind solche mit einem zusätzlichen Leerzeichen, beispielsweise "021 Södra Finnskoga" im Gegensatz zu "020 Rya", das nur ein Leerzeichen nach den Ziffern enthält.
Samir vor 10 Jahren
0
Das liegt am Übereinstimmungsmuster. Neues Übereinstimmungsmuster hier: http://superuser.com/questions/722372/how-to-create-multiple-folders-and-name-them-by-reading-lines-from-text-file/722379#722379
UnlimitedInfinity vor 10 Jahren
0
1
and31415
Ausführen eines PowerShell-Skripts
Angenommen, Sie verfügen über ein PowerShell-Skript, my script.ps1das in gespeichert ist C:\Some folder. Um es auszuführen, können Sie entweder:
Navigieren Sie zum tatsächlichen Pfad und führen Sie ihn aus:
cd "C:\Some folder" & ".\my script.ps1"
Führen Sie es aus, indem Sie den vollständigen Pfad direkt angeben:
& "C:\Some folder\my script.ps1"
&ist der Anrufbetreiber . Alternativ können Sie es von einer regulären Eingabeaufforderung aus starten:
Ich habe das Skript so umgeschrieben, dass es zwei Argumente akzeptiert: die Eingabedatei (die als Text als UTF-8 gespeichert wird) und den Zielordner. Wenn keine Kodierung angegeben ist, wird standardmäßig ASCII verwendet.
Hey, das ist wirklich praktisch. Kannte diese Syntax nicht. Vielen Dank!
Ashtray vor 10 Jahren
0
Ja, ich habe es jetzt getestet, das `" .script.ps1 "allein funktioniert nicht. Aber" & ". \ Script.ps1" "tut dies und tut`. \ Script.ps1`. Aber das tut es Helfen Sie mir nicht bei den Problemen, die ich mit den Zeichen Å, Ä und Ö habe. Warum versteht PS diese Zeichen nicht? Ich werde in Kürze ein Update zu meiner Frage mit Beispielen posten.
Samir vor 10 Jahren
0
Ich habe meine Frage mit Beispielen aktualisiert. Wenn Sie Ihre Antwort erweitern und erklären können, wie ein Skript in PS ausgeführt wird, wenn der Suchpfad Nicht-ASCII-Zeichen enthält, akzeptiere ich es möglicherweise als Lösung. Oder hängt das tatsächlich mit dem Skript selbst zusammen (`get-content $ txtFile`)?
Samir vor 10 Jahren
0
Sie meinen wie get get content $ txtFile | % {} `? Das gibt nur "mkdir" $ folder \ $ _ "aus,` `wiederholt 245-mal im PS-Fenster, erstellt keine Ordner.
Samir vor 10 Jahren
0
Ich bemerkte, dass das Original-Skript mit Dingen wie 021 Södra Finnskoga nicht richtig funktioniert, da der Name ein Leerzeichen enthält. So oder so, das Skript wie `$ folder =" C: \ täst "haben; $ txtFile = "C: \ täst \ Export.txt"; get-content $ txtFile | % `funktioniert für mich. Was verwenden Sie zum Speichern / Bearbeiten des Skripts und der Liste? Das sieht nach einem Codierungsproblem aus.
and31415 vor 10 Jahren
0
Ja. Es sieht auf jeden Fall aus wie ein Codierungsproblem. Bitte sehen Sie meine Antwort.
UnlimitedInfinity vor 10 Jahren
0
@Sammy Ich habe meine Antwort aktualisiert, um zusätzliche Informationen bereitzustellen. Lassen Sie mich wissen, wenn Sie weitere Zweifel haben.
and31415 vor 10 Jahren
0
-1
Infinum
Sie müssen die Datei als UTF-8 mit BOM speichern - Sie können Notepad ++ verwenden. Powershell ist defekt und kann Dateien, die UTF-8 ohne BOM sind, nicht zuverlässig lesen.