Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.035
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von BOfH_666

  1. Oooops ... ich muss zu meiner Schande gestehen, dass ich aufgrund der Fragestellung gar nicht genau hingeschaut hatte. Mit break kann man, wie man auch in der Hilfe nachlesen kann, nur aus Loops oder Swich-Statements ausbrechen (also For, While, Do oder Foreach - Loops). Foreach-Object gehört da nicht dazu ... genau deswegen plädiere ich immer dafür in Scripten so ausführlich wie möglich zu coden und Aliasse auf jeden Fall zu vermeiden. Aber wie schon erwähnt ... es gibt eine andere Lösung: Import-Csv -Path $Path -Delimiter ';' | Select-Object -First 2 ... wirft nur die ersten beiden Zeilen der CSV-Datei aus. Davon abgesehen, bin ich auch bei tesso. Der Code sieht umständlich aus. Vielleicht lässt Du uns mal ein paar Zeilen Deiner CSV-Datei sehen (natürllich um sensible Informationen bereinigt) und erklärst kurz, was das eigentliche Ziel ist. Da kann man bestimmt was verbessern. Edit: Noch vergessen - Thema Datum formatieren: Get-Date -Format 'yyyyMMdd'
  2. Wenn Du in Deinem richtigen Script nicht irgendwelche Credentials mitgeben musst, kannst Du doch dieses ganze Laufwerks-Geraffel überhaupt nicht. Benutze einfach den UNC-Pfad und gut ist!?
  3. Hmmm ... darf ich fragen, warum Du dem Laufwerk C: einen neuen Buchstaben zuweisen möchtest?
  4. ... schon mit break versucht? Vielleicht gibt es ja auch einen besseren Weg. Eine Schleife vorzeitig zu verlassen, fühlt sich für mich immer wie Koitus Interruptus an .... ich versuch's zu vermeiden. Wenn Du sowieso nur die ersten beiden Zeilen verarbeiten möchtest, kannst Du doch mit Select-Object -First 2 prima die Ausgabe darauf einschränken und brauchst nicht hinterher solche Klimmzüge machen.
  5. ... nu gönn' mir doch auch mal meinen Spaß!!
  6. Hey hey ... gute Idee ... meine letzte Begegnung mit einer CNC-Maschine ist ca 35 Jahre her ... ich vermute mal, da hat sich inzwischen ein bissl was getan. ... manche von den Dingern waren noch nicht mal CNC - die waren nur NC-Maschinen. So ... ich hab das Script noch mal etwas umgebaut ... diesmal mit einem kleinen Extra-Dreh. Du brauchst jetzt nur noch den numerischen Offset angeben, den Du zu den Werten addieren möchtest, die vom CNC-Programm nicht die gewünschten Werte mitbekommen haben. Wenn in der Original-Datei z.B. "SetWorkpieceSetupPosition(0.0000, 0.0000, 0.0, 0.0);" steht, dann brauchst Du nur 4,5 und 6.7 für X und Y angeben, dann erhältst Du in der Ausgabe-Datei "SetWorkpieceSetupPosition(4.5000, 6.7000, 0.0, 0.0);" ... das gleiche für den Wert des 5. Arguments von "TypeOfProcess.Drilling". Viel Spaß!
  7. Fehlermeldungen sind wichtig und gehören mit hierher. Die helfen uns, die Fehler zu beseitigen. Ansonsten müssten wir ja raten. Wenn Du Fehlermeldungen postest, die bitte auch als Code formattieren! Ich schau gleich mal .... diesen Super-Sorglos-Service gibt's hier aber nur ausnahmsweise ... beim nächsten Mal musst Du dann selbst ran.
  8. Hmmm ... sehen die zu ersetzenden Strings immer exakt gleich aus, oder können die sich auch unterscheiden? Ich habe die Suchmuster (Patterns) und zu ersetzenden Strings (Replace) mal als Variablen rausgezogen. So kannst Du einfacher mit verschiedenen Versionen spielen und ein bissl rumprobieren. Wenn keine sensiblen Informationen drin sind und die Dinger nicht zu groß sind, könntest Du hier mal eine der Dateien posten? ... oder einen Ausschnitt mit de relevanten Informationen. (das dann bitte auch als Code formattiert um ungewollte Zeilenumbrüche zu vermeiden) Damit meinte ich nur, dass hier auch Nicht-Profis geholfen wird, wenn sie sich wie Profis verhalten und ein bissl mitarbeiten. ... und wenn man sich mit CNC-Programmen beschäftigt, ist man auch als Hobby-ist quasi Profi ehrenhalber. hmmm ... das CNC-Programm is wohl ne kleine Diva?! ... möchte die Sachen auch noch in der richtigen reihenfolge haben ... ... nagut ... ich hab den Code nochmal korrigiert - probier mal so. Wenn das mit den Zeilennummern noch nicht richtig passt, kannst Du das selbst entsprechend anpassen.
  9. Wie wird die Ausgangs-Datei denn erzeugt? Sieht die immer exakt gleich aus? Steht nach den 4 einzufügenden Zeilen immer das Gleiche? Du solltest Dich auch damit beschäftigen, wie man Scripte debugged. Dieses Forum hier ist für Profis - da wird erwartet, dass man selber auch mitarbeitet. ... und nur noch aus Neugier: Like'st Du hier Deine eigenen Beiträge?
  10. Vielleicht nimmst Du Dir ein bissl Zeit und schaffst Dir erstmal die Grundlagen von Powershell drauf. Da gibt es zahlreiche gute Bücher oder - im Moment noch verfügbar - den kostenlosen und sehr empfehlenswerten Video-Kurs in der Microsoft Virtual Academy - Getting Started with Powershell. Das erspart Dir bestimmt eine Menge Frustration und verschwendete Zeit. Ich glaube, man kann eine hinreichend komplexe Technologie nicht vernünftig lernen indem man sich ein paar Zeilen Code zusammengoogled. Oooops ... mein Fehler ... ist korrigiert ... Ich hab auch nochmal die ersten beiden Ersetzungen kontrolliert, von denen Du geschrieben hattest, dass sie funktionierten. Eigentlich sollten sie das mit Deinem Code gar nicht tun. Der -replace Operator arbeitet mit Regulären Ausdrücken und bei denen haben bestimmte Zeichen bestimmte Bedeutungen. Deshalb muß man sie, will man diese speziellen Zeichen tatsächlich finden, "escape'n". Ich hab das im Code auch mal korrigiert Hmmm ... 'bin mir nicht sicher, daß ich das jetzt verstehe. Du hattest ursprünglich geschrieben "Am Ende der Datei sollen folgende vier Zeilen". Soll danach noch eine Leerzeile kommen, oder wie meinst Du das? Hinweis: ich habe den Code in meiner obigen Antwort korrigiert. Zusätzlich habe ich noch die Ausgabedatei mit einem "+" Zeichen vershehen. Dann kannst Du das Script mehrfach laufen lassen, ohne jedes Mal die Dateien hin und her kopieren zu müssen.
  11. Wenn ich Dich nicht falsch verstanden habe, kannst Du Deinen Code deutlich einfacher gestallten $original_file = 'C:\Desktop\TEST.xcs' $destination_file = 'C:\Desktop\TEST+.xcs' $X_Offset = '5' # value to add to the existing value $Y_Offset = '5' # value to add to the existing value $TypeOfProcessArg5 = '3' # value to add to the existing value $ReplacedContent = Get-Content $original_file | Foreach-Object { if ($_ -match '(?:SetWorkpieceSetupPosition)\((\d+\.\d+),\s*(\d+\.\d+),\s*.*\);') { $X_Offset = ($Matches[1] -as [decimal]) + [decimal]$X_Offset $Y_Offset = ($Matches[2] -as [decimal]) + [decimal]$Y_Offset $_ -replace 'SetWorkpieceSetupPosition\(.*\);', "SetWorkpieceSetupPosition($X_Offset, $Y_Offset, 0.0, 0.0);" } elseif ($_ -match '(?<=TypeOfProcess\.Drilling,\s*"-1",\s*"-1",\s*0,\s*-1,\s+)(-*\d+)') { $TypeOfProcessArg5 = ($Matches[1] -as [int]) + [int]'3' $_ -replace '(?<=TypeOfProcess\.Drilling,\s*"-1",\s*"-1",\s*0,\s*-1,\s+)(-*\d+)', $TypeOfProcessArg5 } else { $_ } } $Ergaenzung = @' CreateNullOperation("Wegfahrschritt", 2000.0000, 0.0000, 1); ResetPneumaticHood(); ResetApproachStrategy(); ResetRetractStrategy(); '@ $ReplacedContent[0..($ReplacedContent.Length - 6)] + $Ergaenzung + $ReplacedContent[($ReplacedContent.Length - 5)..($ReplacedContent.Length)] | Set-Content -Path $destination_file -Force Was Du mit den beiden in here-strings versteckten Try-Catch-Blöcken bezwecken möchtest, habe ich nicht verstanden. Achja ... fast hätte ich's vergessen. Wenn Du hier im Forum Code postest, formatier den doch bitte auch als Code. Sonst hast im Zweifel ungewollte Zeilenumbrüche drinne und der Code ist quasi kaputt.
  12. Jaaa ... da geht er natürlich erst hin, wenn er ein bissl Erfahrung gesammelt hat und sich die Anfänger-Hilfe durchgelesen hat und sich auch dran hält ... dann klappt das schon.
  13. Na wenn das nicht die perfekte Gelegenheit ist, sich endlich tiefer in Powershell einzuarbeiten!?!? Speziell bei Powershell finde ich die Eintstieghürde extrem niedrig. So lange es noch verfügbar ist, könntest Du Dich z.B. in der Microsoft Virtual Academy ein bissl "berieseln" lassen. Der Einstiegskurs Getting Started with Powershell ist immernoch sehr empfehlenswert - auch wenn er nicht mehr taufrisch ist. Das kostet Dich nur ein wenig Deiner Zeit, bringt Dich aber enorm vorwärts. Besonders, wenn Du vorhast, Dich noch eine Weile in Windows-basierten System-Umgebungen zu bewegen. Und wenn Du irgendwo stecken bleibst, kannst Du ja immernoch hier fragen, oder hier oder hier oder hier oder hier.
  14. Vielleicht kannst Du ja diesen Teil des Scriptes sowieso etwas "tweaken"/"pimpen". Ich bin immer skeptisch, wenn Anwender eine Wahl treffen sollen und dabei quasi völlig freie Hand haben. Ich fände es deutlich weniger fehlerträchtig, wenn sie in solch einem Fall nur die Wahl hätten, aus einer Liste von Möglichkeiten, die eine Richtige auszuwählen. Also wenn 4 oder 5 Netzlaufwerke existieren, diese als Auswahlliste anbieten und keine anderen Eingaben zulassen. Vielleicht sogar noch besser - der Pfad zur Freigabe sollte doch eigentlich bekannt sein - dann könntest Du danach suchen und das Laufwerk trennen ohne den AW behelligen zu müssen. Für das Neuverbinden der neuen Freigabe würde wieder das eben gesagte gelten - nur die sinnvollen Optionen zur Auswahl anbieten.
  15. Im Zweifel ist "net use" hier wohl sowieso die robustere Wahl. Ich würd einfach bei Laufwerksmappings immer "net use" benutzen (wenn GPOs keine Wahl sind - wäre vielleicht ne prima Gelegenheit, mal aufzuräumen und doch GPOs einzusetzen )
  16. Hmmm ... der Pfad zu diesem Forum ist " -> Start -> Windows Server Forum & IT Pro Forum -> Windows Forum — Scripting" Vielleicht solltest Du Dich in einem Forum umsehen, in dem es um Deinen Android Multimedia Player geht. Vielleicht gibt es ja auch eine andere Lösung, als eine Datei immer und immer wieder neu zu erstellen.
  17. Hmmm ... ich bin ein bissl verwirrt ... wenn die kurze Kommandozeile "blabla.exe -c UK -f kodi" Deine Playlist wunschgemäß erzeugt, brauchst Du doch nur einen Scheduled Job (eine geplante Aufgabe) anzulegen, die alle 4 Stunden den Befehl einmal ausführt .... also kein Script nötig.
  18. BItte keine Bilder von Code posten. Das ist kontraproduktiv, da man den Code im Zweifel nicht kopieren und vielleicht mal ausführen kann. Einfach den Code mittels "</>" aus der Symbolleiste einfügen! Was passiert denn, wenn Du die Argumentliste komplett von einfachen Gänsefüßchen umschlossen übergibst? Also ungefähr so: Start-Process -FilePath 'mysql.exe' -ArgumentList '--host=BlaKeks --user=root -password=Sicher -execute="Show databases"' -NoNewWindow -Wait
  19. Wenn Du zwischendurch mal ein bissl Zeit hast, kannst Du Dich ein bissl "berieseln" lassen. Der kostenlose Videokurs in der Microsoft Virtual Academy - Getting Started with Powershell ist für Einsteiger sehr empfehlenswert. (wenigstens so lange er noch verfügbar ist) Und wenn Du dann in der Schulung sitzt, hast Du schon einen kleinen Vorsprung.
  20. Das ist - bei ansatzweise aktueller Powershell - so nicht ganz richtig. Seit Powershell v3.0 gibt es für Get-ChildItem die Parameter -File und -Directory.
  21. Ich hab es schonmal gesagt und ich wiederhole es gerne nochmal: Nimm Dir doch bitte ein bissl Zeit, um Dir die Grundlagen von Powershell anzueignen. Du stellst Anfängerfragen, die in jedem (Online)-Kurs oder Buch oder Tutorial in den ersten Kapiteln behandelt werden. Es gibt zahlreiche auch meist kostenlose Quellen im Internet, die Dir einen einfachen Einstieg ermöglichen. Wenn Du der englishen Sprache mächtig bist, ist der Kurs Getting Started with Powershell in der Microsoft Virtual Academy sehr zu empfehlen. Dort bringt Dir der Erfinder der Powershell, Jeffrey Snover, die Grundlagen bei. ... und was mir noch einfällt: Poste doch bitte nicht immer Screenshots! Es genügt völlig, wenn Du den Code, den Du benutzt, postest und vielleicht Fehlermeldungen, wenn Du welche erhältst. ... oder Auszüge aus Text-Dateien, falls hilfreich. Screenshots sind immer wenig hilfreich, da man daraus keinen Code oder Text kopieren kann um es zu testen.
  22. Das hängt von Deinen Fähigkeiten ab ... aber prinzipiell ja - klar!!!! ... Ich kann also Nils nur zustimmen. Nimm Dir ein bissl Zeit und schaff Dir die Grundlagen von Powershell drauf. Ein guter Startpunkt könnte die Microsoft Virtual Academy sein. Dort der kostenlose Kurs Getting Started with Microsoft Powershell. Keine Angst, dort geht es zwar um Powershell 3.0 aber die Grundlagen passen auch sehr gut für die aktuelle Windows Version 5.1. Viel Spaß
  23. Dann lösch doch einfach die Screenshots - die helfen dann im Zweifel auch jemand anderem nicht weiter, wenn mal jemand das Gleiche oder was Ähnliches sucht. An diesem kleinen Fehler ist aber schon zu sehen, dass diese Lösung alles andere als robust und fehlertolerant ist. Du solltest also peinlich genau darauf achten, dass alle nötigen Voraussetzungen erfüllt sind oder entsprechend eine gute Fehlerbehandlung einbauen - ganz besonders, wenn Du nicht der Einzige bist, der mit diesem Code arbeiten soll.
  24. Ich dachte, wir hätten uns darauf geeinigt, dass Du aufhörst mit Batch rumzupfrimeln und endlich anfängst mit Powershell zu arbeiten? Übrigens ist es keine Schande, wenn man mal das ein oder andere selbst per Googlen rauskriegt? Ich wette, für die meisten Deiner Fragen bist Du nicht der erste, der solche Aufgaben zu lösen versucht.
  25. Brav! Definitiv. Hier ... nur zum Angeben .... Get-Content -Path .\Ergebnis.txt -OutVariable Ergebnis Get-Content -Path .\Buchstaben.txt -OutVariable Buchstaben Get-Content -Path .\Zahlen.txt -OutVariable Zahlen "$Ergebnis" -match '(\w)\s+(\d)' $Buchstaben -replace $Matches[1] | Set-Content -Path .\Buchstaben.txt -Force $Zahlen -replace $Matches[2] | Set-Content -Path .\Zahlen.txt -Force ... mehr ist für den Anfang nicht nötig ...
×
×
  • Neu erstellen...