Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.091
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von BOfH_666

  1. Wenn's auch was moderneres als VBScript sein darf .... hier ist ne einfache Powershell-Lösung. Get-Content -Path C:\sample\Zeiten.txt | ForEach-Object { $_ -match '(\d\d):(\d\d)' | Out-Null $Zeit = $Zeit + (New-TimeSpan -Hours $Matches[1] -Minutes $Matches[2]) } "Zeit gesamt: {0:g}" -f $Zeit ... so als Vorschlag zum Starten ....
  2. Es ist wohl nicht nur das gewesen, sondern irgendwie eine Kombination. Bei meiner Recherche hatte ich irgendwo gelesen -es ging eigentlich um einen anderen Fehler - dass das Tool den zu verarbeitenden Dateinamen als letztes in der Zeile erwartet. Und wenn es den Parameter an letzter Stelle nicht interpretieren kann, geht es davon aus, dass es ein Dateiname ist. Deshalb auch die Meldung, dass es immer nur eine Datei signieren/verarbeiten kann. Na egal ... schön, dass es doch funktioniert ... einfach die entsprechende Antwort als "die Lösung" kennzeichnen!
  3. So ... jetze ich ... Ich hab mir mal den Spaß gemacht, mir ein selbstsigniertes Zertifikat erstellt, hab mir ein paar XML-Dateien zusammengesucht und ein bissl rumprobiert. Und was soll ich sagen - es scheint zu funktionieren. Jedenfalls erhalte ich keine Fehlermeldungen und die Signaturdateien werden erstellt. :-D Hier ist der passende Code: $OpenSSL_EXE = 'C:\_Temp\openssl\openssl.exe' $SourcePath = 'C:\_Temp\xml' $CertFile = 'C:\_Temp\cert.pem' Get-ChildItem -Path $SourcePath -Filter *.xml | ForEach-Object { $outfile = Join-Path -Path $_.Directory -ChildPath $($_.Name + '.sig') Start-Process -FilePath $OpenSSL_EXE -ArgumentList "dgst -sha512 -binary -out $outfile -sign $CertFile -passin pass:""passw0rd!"" $($_.FullName)" -NoNewWindow } !! Nicht wundern - trotz des Parameters -NoNewWindow poppt in der ISE kurz ein weiteres Konsolenfenster auf - vielleicht für die 1000+ XML-Dateien einfach die normale Konsole nutzen ...
  4. Wow ... is ja noch schlimmer, als ich erwartet hatte ... die haben ja nicht mal Platz für einen vernünftigen Inventaraufkleber. Vielleicht sprichst Du ja nochmal mit den Verantwortlichen. Für manche "Aufgabenstellungen" gibt es eben keine technischen Lösungen. Sowas sollte ja eigentlich sogar gesetzlich geregelt sein.
  5. Nur mal aus Neugier: Was habt ihr denn für Headsets? Ich hätte erwartet, dass Headsets zu den anlagenbuchhaltungstechnisch gesehen "geringwertigen" Gütern gehören und daher nicht bei einer Inventur erfasst werden müssen ... so wie Tastaturen und Mäuse z.B.
  6. Die Klammern im Ergebnis deuten darauf hin, das das Ergebnis ein Array ist. Du kannst die Elemente in diesem Array auf verschiedene Weisen "extrahieren". Die einfachste dürfte sein, wenn Du das Ergebnis an | Select-Object -ExpandProperty <PropertyName> pipe-st.
  7. Powershell is halt die modernere und eben auch bessere Technologie. Es laufen ja auch nur noch relativ wenige Leute mit "dummen" Mobiltelefonen durch die Gegend. Selbst Leute, die's nciht brauchen, haben heute meistens ein Smartphone. Wenn Du am Wochenende mal ein bissl Langeweile hast (oder auch auf Arbeit ), kannst Du Dich kostenlos in der Microsoft Virtual Academy mit Getting Started with Powershell ein bissl berieseln lassen. Das sollte Dir für die ersten Schritte schon das Rüstzeug verschaffen.
  8. OK ... da muss ich dann leider passen, mit cmd/batch bin ich nie richtig warm geworden und werde auch jetzt nicht mehr damit anfangen. Sorry. Ich glaube aber trotzdem dass es sich unbedingt für Dich lohnen würde. Wenn Du nicht grad vor der Rente stehst und noch ne Weile in Windows-Umgebungen unterwegs sein willst, kommt man bei komplexeren Sachen an Powershell nicht mehr vorbei. Und falls Du's beruflich brauchst, hast Du bei der nächsten Gehaltsverhandlung noch ein Pfeil mehr im Köcher. Und mit Powershell findet man nach meiner Erfahrung auch schneller Hilfe.
  9. hmmm ... wie äußert sich denn das? An fehlenden Rechten kann es eher nicht liegen. Was Du mit cmd/batch machen kannst, kannst Du auch Powershell machen. Und die Tools, die Du in cmd/batch ausrufen kannst, kannst Du auch in der Powershell aufrufen (snmpget z.B.) Und die Syntax von Powershell ist, jedenfalls denke ich das, deutlich intuitiver und weniger kryptisch als cmd/batch.
  10. hmmm ... das ist ja quasi keine Frage, sondern eher ein Wunsch. ... oder eine Absichtserklärung ... Also mit Powershell würde das schon funktionieren. Das Script müsste aber im User-Kontext gestartet werden - das heißt im Zweifel ist das Konsolenfenster zu sehen - wenigstens in der Taskleiste - und der Benutzer hätte natürlich immernoch die Möglichkeit das Ganze einfach zu schließen und trotzdem den Rechner auszuschalten.
  11. Hmmm ... was is'n jetzt die eigentliche Frage? ... ja man kann Meldungen ausgeben - hängt davon ab, welche Script-Technologie Du benutzt und wie Du die Scripte startest.
  12. Dürfte es auch Powershell sein? Get-Content -Path 'liste.txt' | ForEach-Object -Process { [PSCustomObject]@{ SYSTEMNAME = & "snmpget -v1 -Ov -c public $_ system.sysName.0" SYSLOCATION = & "snmpget -v1 -Ov -c public $_ system.sysLocation.0" AUSLESEDATUM = & "snmpget -v1 -Ov -c public $_ .1.3.6.1.4.1.2606.7.3.2.8.0" AUSLESEUHRZEIT = & "snmpget -v1 -Ov -c public $_ .1.3.6.1.4.1.2606.7.3.2.9.0" ZAEHLERSTAND = & "snmpget -v1 -Ov -c public $_ .1.3.6.1.4.1.2606.7.4.2.2.1.10.1.20" } } | Export-Csv -Path 'Output.csv' -Encoding UTF8 -Delimiter ';' -NoTypeInformation Vielleicht müsstest Du noch an den SNMP-Kommandos feilen und vielleicht die Pfade bei den Dateinamen ergänzen, aber der Rest sollte laufen.
  13. hmmmm ... ich glaube ja, dass Du zu schnell aufgibst ... Du bist auf der Zielgeraden und willst jetzt die Flinte ins Korn werffen?? ... schau Dir doch nochmal die Doku zu OpenSSL und den Kommandozeilenoptionen an. Dort gibt es noch weitere Optionen, wie man das Passwort an das Tool übergeben kann.
  14. Ich würde ja eher auf die Übergabe des Dateinamens der zu bearbeitenden Datei tippen. Was passiert denn, wenn Du das Kommando manuell mit einem spezifischen Dateienamen in einer Powershell-Konsole eingibst?
  15. Wenn Du die Grundlagen einer Technologie einmal richtig gelernt hast, dann hilft Dir das auch weiter, wenn Du sie nur selten benutzt - 'ist wie Fahrradfahren - Du fällst ja auch nicht um, nur weil Du mal n' halbes Jahr nicht gefahren bist. Ein guter und sogar ansatzweise unterhaltsamer Einstieg gelingt mit dem kostenlosen Videokurs der Microsoft Virtual Acadmy - Getting Started with Microsoft Poswershell. Das Anschauen der enthaltenen Videos dauert nur ca 8-10 Stunden, aber es wird Dir die Augen öffnen und vielleicht in Zukunft eine Menge Deiner Arbeitszeit einsparen weil Du viele Sachen einfach automatisieren kannst. Wenn man des Englishen mächtig ist, ist Powershell-Code in Grenzen quasi selbsterklärend, weil eben keine Hieroglyphen benutzt werden, wie das z.B. bei machen Linux-Tools üblich ist oder war. z.B. braucht man cmdlets wie Test-Path oder Get-Process oder Get-Service nicht wirklich aufwändig erklären, oder? Nun zum Script: Wie Dukel schon geschrieben hat: Wenn die Openssl.exe nicht in der Umgebungsvariable "Path" zu finden ist, musst Du den kompletten Pfad angeben, inclusive der Erweiterung. Die Parameter -Wait und -NoNewWindow zu ergänzen kann auch nicht schaden. -NoNewWindow leitet die Konsolenausgabe von OpenSSL in die Powershell-Konsole um und -Wait wartet einfach mit der Ausführung bis die Aufgerufene externe Anwendung (also OpenSSL in diesem Fall) fertig ist und die Kontrolle wieder abgegeben hat.
  16. Format-cmdlets sollten IMMER als LETZTES in der Pipeline kommen. Alles andere macht normalerweise keinen Sinn. Wenn Du ein Format-cmdlet wie Format-Table benutzt, machst Du aus den Objecten, die üblicherweise von Powershell die Pipeline entlanggereicht werden, Pixel auf auf Deinem Bildschirm, die nicht mehr vernünftig weiterverarbeitet werden können. Measure-Object erwartet ein Objekt bzw. Objekte - wenn es die nicht bekommt, zählt es, was es eben zählen kann ... vermutlich die Zeilen inclusive Leerzeilen. Edit: Noch'n allgemeiner Tipp: Gerade in der Konsole ist es fast immer hilfreich, quasi an jede Pipeline-Etappe ein -ov a oder -ov b oder -ov c usw. anzuhängen. Das macht die Zwischenschritte als Variablen verfügbar und erleichtert häufig die weitere Verarbeitung oder Verfeinerung der Daten. -ov ist dabei der Alias für -OutVariable und a oder b oder c der Variablenname. zB.: get-aduser .... -ov a | ft ... gibt Dir die gefundenene ADUser als Tabelle aus. aber wenn Du auf die "Original-Daten" zugreifen willst, kannst Du einfach $a aus geben und z.B. mit $a.count ... die Anzahl ausgeben.
  17. Hmmm ... wenn Du noch ne Weile in "Windows-Umgebungen unterwegs sein möchtest", nimmst Du Dir bei nächster Gelegenheit mal bitte etwas Zeit und schaffst Dir die Grundlagen von Powershell drauf. Ich glaube, es wird sich für Dich auszahlen und man kommt in Zukunft einfach nicht mehr dran vorbei. Bei der Zuweisung der Variablen gehören die "Werte" in Anführungszeichen - so wie es oben in meinem Code-Beispiel zu sehen ist.
  18. Hmmm ... also ich bin kein Freund von Batch/cmd und auch nie richtig warm geworden damit, aber wenn ich das nicht falsch verstanden habe, sollte es mit Powershell ungefähr so funktionieren: $SourcePath = 'Pfad zum Ordner mit XML-Dateien' $CertFile = 'Zertifikat.pem' # am Besten vermutlich inclusive Pfad Get-ChildItem -Path $SourcePath -Filter *.xml | ForEach-Object { $outfile = $_.BaseName + '.sig' Start-Process -FilePath openssl -ArgumentList "dgst -sha512 -binary -out $outfile -sign $CertFile $_.FullName -passin pass:""hier das Passwort""" } Probier ma! (natürlich erstmal nur an 2 oder 3 Test-XML-Dateien)
  19. ... und wenn's was Regelmäßigeres werden soll, kannst Du Dir hier schon mal ein paar Anregungen holen: https://www.netz-weise-it.training/weisheiten/tipps/item/417-mehrfach-umbenennen-mit-powershell-rename-item-und-regulaeren-ausdruecken.html Na dann wird's aber jetzt höchste Zeit!! Schau mal hier ... https://mva.microsoft.com/en-us/training-courses/getting-started-with-powershell-3-0-jump-start-8276?l=r54IrOWy_2304984382 da kannst Du Dich ein paar Stunden berieseln lassen und lernst nebenbei auch noch die Grundlagen von Powershell ...
  20. .... und damit der Aufwand für so etwas nicht zu groß wird, gibt es das ImportExcel-Modul von Douglas Finke... wenn ich nicht irre, kann man da auch Fomratierungen mitgeben.
  21. Das kommt auf Deine Anforderungen und auf Deine Fähigkeiten an. Aber wenn das den Job erstmal erledigt - super. Ich würde aber dringend empfehlen, sich erstmal die Grundlagen draufzuschaffen. Der Videokurs in der MVA dauert nur ca 8 - 10 Stunden und bildet schon mal eine solide Grundlage.
  22. Wie schade ... ein guter Startpunkt ist der kostenlose VideoKurs in der Microsoft Virtual Academy - Getting Started with Microsoft Powershell. Vernünftig formatiert und die Aliasse ausgeschrieben sieht der Code so aus: Get-ChildItem *.ini | ForEach-Object { if (-not(Test-Path (".\config_bak\" + $_.name))) { Copy-Item $_ .\config_bak -passthru | Select-Object -Property name } }
  23. Schau mal hier: https://stackoverflow.com/questions/42249433/signing-all-xml-files-in-directory-using-batch-script Man braucht das Rad ja nicht immer wieder neu erfinden.
  24. Mit dem Vergleich-Operator -contains prüfst Du ob ein einzelnes Element in einem Array von Elementen enthalten ist. Dabei müssen, bis auf die -Groß-Klein-Schreibung, die Elemente identisch sein, um einen positiven Treffer zu erzeugen. $a = 'Eins','zwei','DREI','vIeR','FuEnF','sechs' $b = 'drei' $a -contains $b sollte ein $true zurückliefern. Während zum Beispiel ... $a = 'Eins','zwei','DREI','vIeR','FuEnF','sechs' $b = ' drei' $a -contains $b ... ein $false als Ergebnis liefert. (Man beachte das zusätzliche Leerzeichen). Hast Du überprüft, ob Dein Trimmen, die von Dir erwarteten Resultate liefert? Gibt es ein Muster bei den Gruppen, die nicht erkannt werden? Unabhängig davon: Get-ADGroup -Filter * -Properties * Diese Zeile saugt ALLE Gruppen mit ALLEN Eigenschaften aus Deinem AD. Das dauert länger als nötig und erzeugt (wenigstens kurzzeitig) unnötig große Last auf dem AD-Controller. Empfehlenswert wäre, die Suche mittels -SearchBase auf die entsprechende OU zu begrenzen und unter -Properties nur die zusätzlichen Eigenschaften auszugeben, die wirklich im weiteren Verlauf des Scripts benötigt werden.
×
×
  • Neu erstellen...