Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.064
  • Registriert seit

  • Letzter Besuch

Beiträge erstellt von BOfH_666

  1. grc,

    zu 1. Nein.

    zu 2. Du musst beim robocopy-Ziel das konkrete Zielverzeichnis mit angeben.  Also 'Desktop', 'Favorites', 'Documents', 'Pictures' und 'Videos' jeweils in den Destinationroot mit einarbeiten.

     

    Als Erklärung zu 1. Normalerweise hat nur der jeweilige User Zugriff auf sein Profilverzeichnis. Möchte jemand anders darauf zugreifen, braucht er Admin-Rechte.

  2. vor einer Stunde schrieb daabm:

    Olaf, laß ihm doch die Chance, sich auf einer Lernkurve zu verbessern.

    Na darum ging's mir doch ... war ich zu subtil?  :D

    vor einer Stunde schrieb daabm:

    Ich hab vor ner Woche auch Code von mir angeschaut, den ich vor 2 Jahren produziert habe. Oha.... :-) Splatting war mir damals noch fremd, also Backticks :-( Nur ein Beispiel...

    Das kenn' ich. Wenn ich mir meine ganz alten Sachen angucke, denke ich mir manchmal nur "Gott sei Dank sieht das niemand außer mir selbst"  ;-):D

  3. ... ich meinte, dass ich bei tesso bin ...  ;-)

    Zitat

     das aktuelle Datum brauch ich nicht.

    Das war doch nur ein Beispiel :shock2::aha2: ... natürlich nimmst Du das Datum aus der CSV-Datei  ... Du kannst jedes beliebige Datum benutzen ... z.B. so

    $BeipsielDatumAusDerCSVDatei = '31.12.2018'
    Get-Date -Date $BeipsielDatumAusDerCSVDatei -Format 'yyyyMMdd'

    Das meinte ich mit "umständlich" ... Du brauchst viele Zeilen Code und könntest vieles stark verkürzen ...  statt

    $Lehrgang = $_.Lehrgangsnummer
    $Lehrgang= $Lehrgang.Replace(" ","")

    ... genügt z.B. auch eine Zeile ...

    $Lehrgang = $_.Lehrgangsnummer -replace '\s*'

    ...

    Musst Du das Datum für jeden einzelenen User zusammenbauen oder gilt das Datum für alle User eines Lehrgangs?  ;-)

  4. Warum nimmst Du nicht einfach meinen Code und versuchst zu verstehen, was er tut? Du führst z.B. mehr oder weniger die gleiche Schleife 3 mal aus, nimmst dafür aber jedes mal die Original-Datei als Grundlage und schreibst jedes mal die Ziel-Datei neu. Das dürfte eigentlich nicht funktionieren.

    Es wäre effizienter, alle Änderungen in einer Schleife nacheinander durchzuführen.

    Ich schreibe in meinem Script die Änderungen mit dem Parameter -OutVariable erst mal temporär in eine Variable. Diese benutze ich dann zum Schluss dazu, dieErgänzung einzufügen. Da Du die Variable nicht benutzt, kann es so nicht funktionieren. Lies einfach Dein Destination-File nochaml mittels Get-Content ein und füge die Ergänzung auf die gleiche Weise wie ich hinzu.

     

    Weißt Du was ein Help-Vampire ist?  ;-)

     

    Ich will ja nicht dran Schuld sein, wenn sich jemand die Pulsadern eröffnet ....  :aha2:

     

    Um meinen Code-Vorschlag quick & dirty um die letzten beiden zusätzlichen Ersetzungen zu erweitern, musst Du nur eine einzige Zeile ändern ... und zwar das hier

    else {
        $_
    }

     ....  in das hier ...

    else {
        $_.Replace("SetApproachStrategy(true, false, -1)", "SetApproachStrategy(false, true, 2)").Replace("SetRetractStrategy(true, false, -1, 0)", "SetRetractStrategy(false, true, 2, 0)")
    }

    ... noch als Erklärung: Der -replace Operator arbeitet mit regulären Ausdrücken. Die String-Methode .Replace() dagegen arbeitet mit direkten String-Ersetzungen. Der zu ersetzende String muss also genau so aussehen, wie in der Methode angegeben.

  5. 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.  ;-):D

     

    Edit:

    Noch vergessen - Thema Datum formatieren:

    Get-Date -Format 'yyyyMMdd'

    ;-):D

  6. ... 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.  ;-);-):D

  7. vor 28 Minuten schrieb wethlo:

    Selbstverständlich!  Mach ich natürlich gerne! Vielleicht kann ich Dich mal unterstützen ein cnc-Programm zu schreiben;-)

    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.  :aetsch2::shock2:

     

    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ß!

  8. vor 4 Minuten schrieb wethlo:

    ... Wirft mir so leider Fehlermeldungen aus.

    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!

    vor 4 Minuten schrieb wethlo:

    Ich lade gleich mal eine XCS-Datei (Format, welches unser CAD-Programm ausspuckt) hoch, da kannst du Dir das mal anschauen.

    Ich schau gleich mal ....  diesen Super-Sorglos-Service gibt's hier aber nur ausnahmsweise ... beim nächsten Mal musst Du dann selbst ran.  ;-):D

  9. vor 45 Minuten schrieb wethlo:

    Wie gesagt. Es handelt sich um unser CNC-Programm, welches Programme auswirft die mit den beschriebenen Inhalten ergänzt werden müssen.

    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)

    Zitat

    Wusste nicht, dass es sich hier um ein Forum nur für Profis handelt.

    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.  ;-):D

     

    Zitat

    Nach den vier einzufügenden Zeilen stehen immer die selben Zeilen. Sprich: Wenn diese dort eingefügt werden, wäre es perfekt.

    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.

  10. 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.  :aha2:

     

    ... und nur noch aus Neugier: Like'st Du hier Deine eigenen Beiträge?

  11. vor 6 Stunden schrieb wethlo:

    Bin wie gesagt noch ein Neuling in Sachen PowerShell, und habe mich mit Hilfe von Google zum Skript durchgeschlungen. Von dem her kann ich Dir die Frage mit den here-strings leider nicht beantworten ;-)

    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.  ;-)

    Zitat

    In der xcs-Datei wird nun jede Zeile doppelt ausgegeben, was nicht Sinn der Sache ist...

    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

    Zitat

    Die Ergänzung sollte nicht ganz ans Ende geschrieben werden, sondern beginnend mit der fünftletzten Zeile.

    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.  ;-)

     

  12. 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.

  13. vor 9 Stunden schrieb Stibo:

    Nun ist es so, dass sich meine Scriptfähigkeiten in Grenzen halten. ;)

    Na wenn das nicht die perfekte Gelegenheit ist, sich endlich tiefer in Powershell einzuarbeiten!?!?  ;-):D 

     

    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:D 

  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. 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

     

  16. vor 42 Minuten schrieb SubPort:

    Mit den Grundlagen kämpfe ich noch. In unserer Company steht bald eine PS-Schulung an.

    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.  ;-):D

  17. 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.

×
×
  • Neu erstellen...