Jump to content

BOfH_666

Expert Member
  • Gesamte Inhalte

    2.065
  • Registriert seit

  • Letzter Besuch

Beste Lösungen

  1. BOfH_666's post in Systemvariablen setzen wurde als beste Lösung markiert.   
    Wie wahrscheinlich ist es denn, dass der Befehl eine Umgebungsvariable zu setzen fehlschlägt? Im einfachsten Fall checkst Du einfach "$?"  ... dann kannst Du davon ausgehen, dass der Befehl erfolgreich ausgeführt wurde. 
     
  2. BOfH_666's post in Zugferd für Kleine Betriebe wurde als beste Lösung markiert.   
    Ich dachte der Kram wird kostenlos abgegeben ... damit's eben keine Hürden für die Nutzung gibt ... oder so ... 
     
    https://www.ferd-net.de/standards/zugferd-2.2/index.html?changelang=3
     
    ... ist das nicht sowas?
  3. BOfH_666's post in Lokalen User mit Profil und Ordner löschen wurde als beste Lösung markiert.   
    Davorin,
     
    schau Dir mal das hier an ... Du brauchst das Rad ja nicht neu erfinden .. .das gibt es schon ne Weile ... 
     
    https://adamtheautomator.com/powershell-delete-user-profile/
     
    Sollte da nicht mindestens ein Asterisk (*) in dem String sein, damit das funktioniert?   also  "C:\Users\install*"  oder einfach "*install*" oder so ... 
    Escape die Sachen doch einfach ... 
     
    [REGEX]::Escape("C:\Users\install")  
  4. BOfH_666's post in Powershell, RegEx in Select wurde als beste Lösung markiert.   
    Also für die zweite Gruppe geht es. Und wenn Du Zahlen auch zulassen möchtest, nimmst Du ...
    $groups = Get-AdGroup -Filter * | Where-Object -Property Name -Match -Value "GU_[a-z0-9]{4}_Bewerber" ¯\_(ツ)_/¯
  5. BOfH_666's post in Suche in Dateien, Performance steigern wurde als beste Lösung markiert.   
    Hallo und Willkommen im MCSEboard.
    Mit Deinem Code klapperst Du für jede einzelne Zeile Deiner Inventarliste ALLE Text-Dateien im Verzeichnis 'C:\temp' ab. Wenn es 30 Dateien sind, prüfst Du also 1.200 mal 30 Dateien. Es wird also 36.000 mal eine Datei gelesen. Da würde ich einen anderen Ansatz versuchen.
    Wie ist denn die Beziehung zwischen Simkartennr und Dateien mit Abrechnungsdaten? Ist das 1:1? Falls "ja", würde ich mir einen "Index" mit den Dateien der Abrechnungsdaten mit den jeweiligen Simkartennr aufbauen und diesen dann z.B. mit einem Compare-Object mit der Inventarliste vergleichen. Somit brauchst Du die 30 Dateien nur einmal abklappern und es sollte deutlich schneller laufen. 
  6. BOfH_666's post in Mehrere UTF-8 Textdateien in ANSI umwandeln mit Powershell wurde als beste Lösung markiert.   
    ???
     
    Cool. Glückwunsch. Und danke für's Teilen.
     
    Ich würd's so lassen ...  
     
    Ein Tipp für's nächste Mal: Code hier im Forum bitte als Code formatieren. 
    Danke schon mal im Voraus
  7. BOfH_666's post in SNMP Sicherheitseinstellungen remote über Powershell ändern wurde als beste Lösung markiert.   
    Statt
    nimm mal
    $RegKeyName = '$Beispiel$'  
    Du brauchst übrigens gar keine Schleife benutzen (foreach). Du kannst "Invoke-Command" direkt ein Array von Computernamen übergeben.  
  8. BOfH_666's post in Powershell -replace wurde als beste Lösung markiert.   
    Punkte sind, wenn es um regex geht "spezielle Zeichen". Der Punkt steht für ein beliebiges Zeichen. Wenn Du also wirklich einen Punkt ersetzen willst, musst Du ihn "Escapen". 
     
    Im einfachsten Fall so ... 
    "2261 4405 ..." -replace '\s\.\.\.'  
    Das Escape-Zeichen ist der Backslash "\" und das "\s" steh hier für ein "White-Space" - also ein Leerzeichen oder ein Tab .... 
  9. BOfH_666's post in EMF Datei in z.B. JPG umwandeln wurde als beste Lösung markiert.   
    Jan hat Recht. Mein Fehler. Sorry. Ich hatte das ").FullName" beim "Zusammenbauen" des Codes wegegelassen und hatte deshalb noch das intakte Objekt zum Weiterarbeiten zur Verfügung.
     
    Hier also nochmal mein Vorschlag komplett, wie er eigentlich funktionieren sollte:

     
    $Excel = New-Object -Comobject Excel.Application $Excel.Visible = $true $Dir = 'C:\CADLINE\_Einzelteile' $Filepath = (Get-ChildItem $Dir -recurse | Where-Object name -like "*xlsm" | Sort-Object LastWriteTime -Descending)[0] $Workbook = $Excel.Workbooks.Open($Filepath.FullName) $Excel.Run("MCStudioExport") $Excel.ActiveWorkbook.Save() $Workbook.Close() $excel.Quit() & 'C:\Program Files\IrfanView\i_view64.exe' "$($FilePath.Directory.FullName)\*.emf" /convert="$($FilePath.Directory.FullName)\*.bmp" [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workBook) [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) Remove-Variable -Name excel  
     
    Hmmm ... ich würde dabei auch eine Fehlermeldung erwarten, aber auf der anderen Seite auch nicht, dass es funktioniert.  

    Vielleicht versuchst Du einmal die Kommandozeile "manuell" einzugeben .... also 

     
    & 'C:\Program Files\IrfanView\i_view64.exe' "C:\CADLINE\_Einzelteile\*.emf" /convert="C:\CADLINE\_Einzelteile\*.bmp"  
  10. BOfH_666's post in PS update-fsrmquota wurde als beste Lösung markiert.   
    Vielleicht hilft Dir das hier weiter:
     
    https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-7.3#confirmpreference
  11. BOfH_666's post in Power Shell Passwort abfangen verhindern wurde als beste Lösung markiert.   
    Ich bin absolut bei meinen "Vorrednern"  ... 
     
     
    ... der Ansatz klingt mehr als dubios und ich persönlich würde mich mit Händen und Füßen dagegen sträuben, da mitmachen zu müssen.
     
    Davon unabhängig ...
     
     
    ... ist das ein sehr unübliches Nutzungs-Szenario für PowerShell und meiner Meinung nach nicht das, wofür PowerShell gedacht ist.  ... 'will sagen: das ist das falsche Tool für die Aufgabe.  
     
    Ich hatte vor 15 Jahren oder so mal mit AutoHotkey etwas für einen Kunden gebastelt, was eine Dialogbox im Vollbild im Vordergrund geöffnet hat und zur Bedienung alle Tasten bis auf die 3 erlaubten und die Maus deaktiviert hatte.  ... und bevor Du fragst - nein - ich habe das Script nicht mehr. 
     
    Und noch ein allgemeiner Tipp für's Forum:  Code kannst Du hier auch als Code formatieren ... das "</>", links neben dem Grinsegesicht in der Symbolleiste.
  12. BOfH_666's post in Powershell: Ordnerinhalt prüfen und dann verschieben wurde als beste Lösung markiert.   
    Du erwartest also, dass Dir hier jemand den Code frei Haus liefert, oder wie soll man diesen Satz verstehen?
     
    Wenn der Code in Deiner Frage von Dir ist, scheinst Du ja mit dem Konzept der Pipeline vertraut zu sein, oder?
     
    Wenn Du jetzt Deine Liste von Dateien hast ($FileList), dann selektierst Du einfach die ersten 50 mit "Select-Object -First 50" und leitest sie per Pipeline weiter an ein "Move-Object"  
  13. BOfH_666's post in Silent Install Script geschrieben. UAC nervt wurde als beste Lösung markiert.   
    Starte doch einfach das Script mit erhöhten Rechten. Dann erben alle weiteren daraus aufgerufenen Prozesse diese Privilegien.   
  14. BOfH_666's post in Pipe: Anzeige von Informationen zweier Objekte möglich? wurde als beste Lösung markiert.   
    Markus,
     
    willkommen im MCSEboard.  
     
     
    Eine einfache Möglichkeit ist es, das Ergebnis der Abfrage in einer Variablen zu speichern und diese einmal auszugeben. Wenn alles wie gewünscht aussieht, könntest Du mit der Variablen weiterarbeiten und deren Inhalt einfach an "Remove-Item" weiterreichen. Statt "Write-Host" solltest Du dann aber bitte "Select-Object" benutzen.
     
    $Result = Get-ChildItem -Path 'U:\Eigene Dateien\Privat' -Recurse -filter *.pdf | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-300)} -PipelineVariable CurFile | Get-acl | Where-Object {$_.owner -like '*q0219005*'} | Select-Object -Property Owner, @{Name = 'LastWriteTime'; Expression= {$CurFile.LastWriteTime}}, @{Name = 'FullName'; Expression= {$CurFile.FullName}} $Result $Result | Remove-Item -WhatIf  
    So ungefähr könnte es aussehen ...  !! ungetestet - bitte vorher mit Test-Daten prüfen !!
     
  15. BOfH_666's post in Wie kann ich die Zoom Leiste aus MS Edge im IE Mode entfernen? wurde als beste Lösung markiert.   
    Ist es möglich, dass das keine "Zoom Leiste" ist sondern eine "Status Leiste"?  ... dann könntest Du danach suchen, wie man die Status-Leiste deaktiviert.   
  16. BOfH_666's post in Powershell Ausgabe wurde als beste Lösung markiert.   
    Tim,
    Willkommen im MCSEboard.
     
     
    Und warum schreibst Du dann eine einfache Text-Datei? Export-Csv wäre dann wohl besser geeignet. 
     
     
    Im einfachsten Fall startest Du das Script im gewünschten Verzeichnis und dann sollte so etwas hier genügen:
    Get-ChildItem | Get-FileHash | Export-Csv -Path 'C:\temp\HashList.csv' -NoTypeInformation  
  17. BOfH_666's post in Mehrere .csv Dateien mit Powershell bearbeiten uns speichern wurde als beste Lösung markiert.   
    Im einfaschte Fall sollte es das hier bringen:
    $folder_csv = 'C:\Install\Import' $fileList = Get-ChildItem -Path $folder_csv -Filter *.csv -File foreach ($file in $fileList) { $NewContent = Get-Content $file.FullName | Select-Object -Skip 1 $NewContent | Out-File -FilePath $file.FullName -Force }  
  18. BOfH_666's post in ACLs auslesen wurde als beste Lösung markiert.   
    Was für ein nachlässig geschriebener PowerShell-Code ....  
     
    "dir" ist ein PowerShell-Alias für Get-ChildItem. der Parameter -Directory teilt Get-ChildItem mit, dass es ausschließlich Verzeichnisse auflisten soll. Wenn Du auch Dateien angezeigt haben möchtest, musst Du den also weglassen. Haben wirklich einzelne Dateien separat gepflegte Berechtigungen?
  19. BOfH_666's post in Batch um Dateien in Ordner mit Teil des Dateinamen zu verschieben wurde als beste Lösung markiert.   
    Wo buddelt ihr nur immer wieder so alten Sch**ß aus ... nimm Powershell:
    $Quellverzeichnis = 'C:\sample\Quelle' $Zielverzeichnis = 'C:\sample\Ziel' Get-ChildItem -Path $Quellverzeichnis -Filter *.pdf -File | ForEach-Object{ $Name = ($_.BaseName -split '_')[2] $Ziel = Join-Path -Path $Zielverzeichnis -ChildPath $Name if (-not (Test-Path -Path $Ziel)) { New-Item -Path $Ziel -ItemType Directory | Out-Null } Move-Item -Path $_.FullName -Destination $Ziel }  
  20. BOfH_666's post in If Exist Value in CSV Datei wurde als beste Lösung markiert.   
    Es wär natürlich ne gute Idee, nicht nach "X" zu fragen, wenn Du eigentlich "Y" wissen willst.  
     
     
    Wenn Du in der Spalte mit den Gruppen/Berechtigungen mehrere durch Trennzeichen getrennte Einträge drin hast, kannst Du die mittels "-split" in ein Array aufspalten und dann mit einer Schleife über dieses Array "drüber-iterieren".    ... da brauchst Du keine 100 if's untereinanderzupacken.
     
    Edit:
     
    also sowas hier:
    $CSVInput = @' user,gruppen max.mustermann,"test1,test2,test3,test4,test5,test6" frau.mustermann,"test1,test2,test,3,test4" '@ | ConvertFrom-Csv -Delimiter ',' foreach ($Item in $CSVInput) { $GruppenListe = $Item.gruppen -split ',' foreach ($Gruppe in $GruppenListe) { [PSCustomObject]@{ User = $Item.User Gruppe = $Gruppe } } }  
  21. BOfH_666's post in Powershell Script loop wurde als beste Lösung markiert.   
    hmmm ... Dein Code is syntaktisch falsch oder unvollständig ... ich hoffe mal, dass das nur beim hierher Kopieren passiert ist.   
     
    # Import active directory module for running AD cmdlets Import-Module activedirectory Das ist überflüssig. Seit PowerShell Version 3 werden korrekt installierte Module automatisch geladen.  Das Einzige, was vielleicht Sinn machen würde wäre...
     
    #Requires -Modules ActiveDirectory  
    ... 
     
    $users = Get-ADUser -F {Office -eq "group1" -or Office -eq "group2" -or Office -eq "group3"}  
    Vermutlich wird mich gleich wieder jemand korrigieren und sagen, dass das mit LDAP-Filter überhaupt kein Problem ist, aber meiner Meinung nach ist es bei komplexen Bedingungen häufig einfacher, die Filterung mit einem Where-Object zu erledigen. Du könntest also hiermit
    $users = Get-ADUser -SearchBase 'whatever fits to your environment' | Where-Object { $_.Office -in $ADUsers.Office} ... die gewünschten AD-Konten ermitteln.
  22. BOfH_666's post in Script - Ordner liegt länger als 5 Minuten im Verzeichnis wurde als beste Lösung markiert.   
    Nur um es nicht falsch verstanden zu haben: Du suchst nach Ordnern, oder?
    Warum dann ...
    $_.psIsContainer -eq $false  ... ?
    Und wenn ich mich nicht irre, wird die Eigenschaft "LastWriteTime" eines Ordners von der aktuellsten "LastWriteTime" der im Ordner enthaltenen Dateien bestimmt. Das hieße, wenn in dem Ordner laufend neue Dateien geschrieben werden, ändert sich auch permanent die "LastWriteTime" des Ordners.
     
    Übrigens: Seit PowerShell Version 3 kennt das cmdlet Get-ChildItem die Parameter -File und -Directory, um die Suche auf Dateien oder Ordner zu beschränken.  
  23. BOfH_666's post in Gesendet Elemente bei shared Mailboxen wurde als beste Lösung markiert.   
    Das ist der Standard, wenn man sich die Mailbox korrekt in Outlook einrichtet.    .... nicht als Option "weiteres Postfach" zum eigenen Postfach, sondern als eigenständiges Postfach NEBEN seinem eigenen Postfach.   
  24. BOfH_666's post in Batch - Datei zum Kopieren von Dateien nach Installation wurde als beste Lösung markiert.   
    Deshalb glaube ich, dass es einfacher für Dich wäre, wenn Du gar nicht mehr mit Batch anfängst, sondern Dich gleich auf PowerShell stürzt.  Die Syntax ist deutlich konsistenter und - wie ich finde - viel einfacher zu erlernen und man findet auch deutlich mehr Hilfe im Netz.
     
     
    Du solltest keinen Code benutzen, den Du nicht verstehst.
     
    Der eigentlich relevante Code ist das hier:
    start /wait "Installation Programm" "F:\xxx\yyy.exe" if exist %C:\Program Files (x86)\xxx\yyy.EXE% ( xcopy "%cd%\Datei.exe" "C:\Program Files (x86)\xxx" /y /q )  
    In Batch werden Variablen in Prozentzeichen eingeschlossen. Der Pfad in Deiner if-Anweisung steht komplett in Prozentzeichen.
     
    Angenommen, dass das Skript im gleichen Ordner liegt, wie die Installationsdatei und die Updatedatei würde das Ganze in PowerShell ungefähr so aussehen:
    & "$PSScriptRoot\yyy.exe" if (Test-Path -Path 'C:\Program Files (x86)\xxx\yyy.EXE') { Copy-Item -Path "$PSScriptRoot\UpdateDatei.exe" -Destination 'C:\Program Files (x86)\xxx' }  
    Ich glaube, selbst für jemanden ohne Kenntnisse, ist der Code ziemlich einfach zu lesen und zu verstehen.   
  25. BOfH_666's post in Zwei Spalten vergleichen bzw. Inhalte löschen wurde als beste Lösung markiert.   
    Erscheint mir irgendwie redundant.  
     
    Aber egal ...  Du sammelst Dir einfach alle AD User ein
    $allADUserList = Get-ADUser -Filter * -SearchBase 'OU=Germany,DC=contoso,DC=de' Dann holst Du Dir die Gruppenmitglieder
    $DarfSurfen = Get-ADGroupMember -Identity 'DarfSurfen' Und dann vergleichst Du die 
    Compare-Object -ReferenceObject $allADuserList -DifferenceObject $DarfSurfen -Property DistinguishedName Was übrig bleibt, packst Du in die andere Gruppe.
×
×
  • Neu erstellen...