Jump to content

nv_it

Members
  • Gesamte Inhalte

    19
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von nv_it

  1. Moin, danke schonmal für die Tipps und Vorschläge Ich war die Tage leider etwas außer gefecht und werde mir die "bessere Version" heute mal anschauen.
  2. Hallo zusammen, ich baue aktuell mal wieder ein Skript mit Powershell welches zum einen eine Bestimmte Gerätesammlung aus dem Active Directory ausliest. Für jeden Computer in dieser Liste soll in bestimmten Pfaden sollen Dateien die älter sind als X Tage gelöscht werden. Außerdem soll mit dem Skript auf einem Server in verschiedenen Pfaden ebenfalls Dateien die älter sind als X Tage gelöscht werden. Ich habe das ganze bisher so realisiert was auch an sich gut funktioniert: $MDE = (Get-ADComputer -Filter "Name -like 'COMPUTER'").Name $SourceMDE1 = "\\$PC\c$\XXX\XXX\" $SourceMDE2 = "\\$PC\c$\XXX\XXX\" $SourceMDE3 = "\\$PC\c$\XXX\XXX\" $SourceFVS1 = "\\server\c$\XXX\XXX\" $SourceFVS2 = "\\server\c$\XXX\XXX\" $SourceFVS3 = "\\server\c$\XXX\XXX\" $SourceFVS4 = "\\server\c$\XXX\XXX\" $LogSourceMDE = "\\server\c$\XXX\XXX\" $LogSourceFVS = "\\server\c$\XXX\XXX\" $Days1 = 10 $Days2 = 30 $ext = "*.bat","*.cat","*.txt","*.ini","*.zip","*.pdf","*.log" $logMDE = "$LogSourceMDE$(get-date -format yymmddHHmmss).txt" $logFVS = "$LogSourceFVS$(get-date -format yymmddHHmmss).txt" $DateBeforeXDays1 = (Get-Date).AddDays(-$Days1) $DateBeforeXDays2 = (Get-Date).AddDays(-$Days2) ForEach ($PC in $MDE) { start-transcript $logMDE write-host "--------------------------------------------------------------------------------------" write-host "Löschen aller Dateien ($ext) im Ordner $SourceMDE1 $SourceMDE2 $SourceMDE3 die älter sind als $Days1 und $Days2 Tage." write-host "--------------------------------------------------------------------------------------" get-childitem $SourceMDE1\* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays1 -and -not $_.psiscontainer} |% {remove-item $_.fullname -force -verbose} get-childitem $SourceMDE2\* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays1 -and -not $_.psiscontainer} |% {remove-item $_.fullname -force -verbose} get-childitem $SourceMDE3\* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays1 -and -not $_.psiscontainer} |% {remove-item $_.fullname -force -verbose} stop-transcript } start-transcript $logFVS write-host "--------------------------------------------------------------------------------------" write-host "Löschen aller Dateien ($ext) im Ordner $SourceFVS1 $SourceFVS2 $SourceFVS3 $SourceFVS4 die älter sind als $Days1 und $Days2 Tage." write-host "--------------------------------------------------------------------------------------" get-childitem $SourceFVS1\* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays2 -and -not $_.psiscontainer} |% {remove-item $_.fullname -force -verbose} get-childitem $SourceFVS2\* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays2 -and -not $_.psiscontainer} |% {remove-item $_.fullname -force -verbose} get-childitem $SourceFVS3\* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays2 -and -not $_.psiscontainer} |% {remove-item $_.fullname -force -verbose} get-childitem $SourceFVS4\* -include $ext -recurse | where {$_.lastwritetime -lt $DateBeforeXDays1 -and -not $_.psiscontainer} |% {remove-item $_.fullname -force -verbose} stop-transcript Jetzt hab ich leider noch ein Problem, und zwar in einem der Pfade (SourceFVS2) sind Unterordner die ich auch nach dem gleichen Schema mit löschen möchte. Steh gerade etwas auf dem Schlauch welchen Parameter ich ändern muss damit er in diesem Pfad die Unterordner mit löscht. Ansonsten bin ich allgemein offen für Verbesserungsvorschläge Vielen Dank im voraus. Gruß Niklas
  3. Für unsere Zwecke reicht meine Variante vollkommen aus liest genau die Rechner aus die es soll.
  4. ja ich weiß, könnte man in ein Skript bauen aber für unseren Fall ist es separat besser, da wir nicht jedes mal wenn wir die Startzeiten kontrollieren wollen auch gleich die Dateien kopieren möchten. Zu den Kommentaren, ist mit Absicht so einfach beschrieben
  5. Gerne, es sind 2 Skripte: Skript zum Kopieren von einer Datei von mehreren bestimmten Rechnern im Active Directory: #liest Rechner aus dem Active Directory $Rechner = (Get-ADComputer -Filter "Name -like 'XX*-M'-or Name -like 'YY*-S'").Name #Kopiert Datei von Rechner zu Share ForEach ($PC in $Rechner) { Copy-Item -Path "\\Pfad\zur\Quell\Datei\Datei.ini" -Destination "\\Server\Share\$PC.Datei.ini" -ErrorAction Ignore } Skript zum Abfragen der letzten Startzeit von mehreren bestimmten Rechnern im AD: #liest Rechner aus dem Active Directory $Rechner = (Get-ADComputer -Filter "Name -like 'XX*-M'-or Name -like 'YY*-S'").Name #fragt die letzte Startzeit der Rechner ab ForEach ($PC in $Rechner) { (Get-CimInstance -ClassName CIM_OperatingSystem -ComputerName $PC -ErrorAction Ignore| Select-Object -Property LastBootUpTime, PSComputerName) } Da bei meinem Fall zu jedem Rechner meist ein Computerobjekt existiert was nicht erreichbar ist habe ich noch das -ErrorAction Ignore mitgegeben.
  6. Hi, nochmal vielen lieben Dank für die Hilfe! Skript funktioniert, Thema kann als gelöst markiert werden. Kann ich das auch selbst, wenn ja wo?
  7. Okay danke, das hilft mir schonmal weiter jetzt habe ich nochmal eine andere Frage zu meinem LastBootUpTime, das Skript sieht aktuell so aus: $Rechner = (Get-ADComputer -Filter 'Name -like "XX*-M"').Name ForEach ($PC in $Rechner) { (Get-CimInstance -ClassName CIM_OperatingSystem -ComputerName $PC | Select-Object -Property LastBootUpTime) } das gibt mir schonmal brav die Startzeiten der Rechner aus, wie kann ich hier jetzt einstellen das mir das Skript zusätzlich den Rechnernamen zur jeweiligen Startzeit mitgibt?
  8. Moin, danke schonmal für die vielen hilfreichen Antworten und Tipps. Bin etwas weitergekommen, beide Skripte funktionieren jetzt soweit das wenn ich die Rechner einzelnd mit in das Skript (in die Variable) schreibe. $PCListe = @('PC1','PC2') ForEach ($PC in $PCListe) { Copy-Item -Path \\$PC\c$\xxx\xxx\xxx.ini -Destination "\\server\xxx\xxx\$PC.xxx.ini" } Wenn ich allerdings versuche da das Get-ADComputer mit einzubauen erhalte ich aktuell noch Fehler: $PCListe = Get-ADComputer -Filter 'Name -like "xx*-S"' -Properties Name | FT Name ForEach ($PC in $PCListe) { Copy-Item -Path "\\$PC\c$\xxx\xxx\xxx.ini" -Destination "\\server\xxx\xxx\$PC.xxx.ini" } Fehler: Der Pfad "\\Microsoft.PowerShell.Commands.Internal.Format.GroupStartData\\XX\xx.ini" kann nicht gefunden werden... in Zeile 5 Zeichen 5 Copy-Item.... Also er sucht den Pfad garnich nach dem Rechnernamen. Bin gerade etwas ratlos. Wenn ich mir einfach mal die Variable $PCListe ausgeben lasse sehe ich aber das diese richtig gefüllt ist.
  9. nein ich habe das jetzt Testweise mit 2 Rechnern gemacht. wenn ich das bei jedem Rechner einzelnd abfrage funktioniert es einwandfrei, wenn ich jedoch beide rechner in die Variable schreibe klappt es nicht, da scheint er schon ab dieser Zeile ein Problem zu haben: $os = Get-WmiObject -ComputerName $Rechner -Class win32_operatingsystem
  10. Hi, werde ich tun, danke schonmal. Zur WMI-Abfrage habe ich es einfach so probiert: $Rechner = "PC-XY.FQDN","PC-Z.FQDN","PC-USW.FQDN"
  11. Hallo zusammen, ich habe mal wieder zwei kleine Aufgaben die ich mit Powershell realisieren möchte. Folgende Situation: Ich habe ca. 145 Rechner von denen ich eine Datei kopieren will, die bei allen Rechnern im gleichen Pfad liegt. Ich hab das soweit schonmal mit dem Copy-Item gebaut jedoch kommt es mir so vor als würde es auch schöner gehen als jeden Rechner in eine eigene Variable zu packen. Da die kopierten Dateien im gleichen Share landen und jeweils mit Rechnername benannt werden sollen. Hier mal mein Ansatz: $Rechner1="\\XXX-X" $Speicherort1="\\SERVER\SHARE\Unterordner\$Rechner1.Datei.ini" Copy-Item -Path "$Rechner1.FQDN\c$\xxx\xxx\Datei.ini" -Destination $Speicherort1 $Rechner2="\\YYY-Y" $Speicherort2="\\SERVER\SHARE\Unterordner\$Rechner2.Datei.ini" Copy-Item -Path "$Rechner2.FQDN\c$\xxx\xxx\Datei.ini" -Destination $Speicherort2 ... ... Wäre toll wenn mir da jemand einen evt. besseren Weg zeigen kann. Zusätzlich dazu muss ich ein separates Skript erstellen mit dem ich die LastBootUpTime von mehreren Rechnern abfrage. Dazu habe ich auch etwas geschrieben was mir allerdings immer nur von einer Maschine die LastBootUpTime liefert: $Rechner = "PC-XY.FQDN" $os = Get-WmiObject -ComputerName $Rechner -Class win32_operatingsystem $os.ConvertToDateTime($os.LastBootUpTime) bei diesem Skript würde ich nach meinem Verständnis einfach mehrere Rechner in die Variable mit reinschreiben jedoch kommt dann der Fehler: "Get-WmiObject : Der RPC-Server ist nicht verfügbar. 0x8007068A" Wenn ich den Rechner jedoch einzelnd abfrage funktioniert das Skript. Kann mir da evt. jemand sagen wo der Fehler liegt? Vielen Danke schon jetzt für die Hilfe Gruß Niklas
  12. Hi nochmal, der Beitrag kann geschlossen werden. Habe mir die Grundlagen soweit beigebracht dass ich das Skript erfolgreich schreiben konnte. Vielen Dank für die Hilfestellungen
  13. okay, dann schonmal danke für die Tipps ;) ich versuche mich jetzt trotzdem erstmal ein bisschen mit Powershell. Kann mir evt. jemand von euch sagen wenn ich eine csv Datei importiere, die dann in einer Variable speicher, wie ich dann aus dieser Datei in der Tabelle eine bestimmte Zeile auslesen kann?
  14. Ähm, bisher hab ich noch nicht viel mit Sysprep gemacht, in meinem Verständnis kann ich damit ein angepasstes Windows Image erstellen z.B. eigene Software mit einpflegen, und z.B. mit generalize Informationen löschen. Klär mich doch bitte auf damit ich dich auch verstehe
  15. Moin, @zahni Also vom Windows Image her ist ja alles schon fertig, das heißt die Rechner werden alle mit dem gleichen Stand installiert. Was ich mit dem Skript dann machen will ist für jeden Markt die jeweiligen Einstellungen setzen, wie Computername, Domänenbeitritt, Ip-Adresse, Gateway, DNS usw.. Wenn das das ist was du mit Sysprep gemeint hast.
  16. @BOfH_666 Super Sache, bin eh ein freund von kostenlosen Videotutorials vielen Dank dafür werde ich mir auf jeden Fall anschauen.
  17. Okay, vielen lieben Dank schonmal für die Antworten. Ich werde mich mal belesen und basteln und komme dann evt mit Fehlern oder Fragen wieder auf euch zu
  18. Hi und danke ;) Das Windows 10 wird von uns mit einem fertigen Image erst installiert und im Nachgang würden wir dann das Skript ausführen wollen. Client-Management ist erst noch in Klärung welches wir da genau einsetzen werden. Da wir aber vorher in einem Projekt die Systeme neu installieren werden war so ein Skript geplant.
  19. Hallo zusammen, ich bin gerade dabei mich etwas in Powershell einzuarbeiten, habe zwar mit Batch etwas Erfahrung aber die müsste ich auch erst wieder auffrischen und warum nicht gleich für Powershell. Als erstes will ich euch kurz Erklären was ich mit Powershell realisieren möchte. Wir haben viele Fillialen (Märkte) im Einsatz und wollen für alle Märkte die Kassensysteme neu installieren. Das Skript soll also beim Ausführen eine kleine GUI bereitstellen wo ich eine bestimmte Marktnummer eingebe und das Skript mir dann die richtigen Daten zu genau dieser Marktnummer aus einer CSV-Datei ausliest und als Einstellungen im Windows (10) setzt. Die CSV-Datei wird voraussichtlich so aufgebaut sein: Markt-Nr. ; Computername ; Domäne ; IP-Adresse ; Subnetzmaske : Gateway ; DNS ; DNS2 ; DNS3 ; DNS-Suffix Ich gehe davon aus dass dieses Skript etwas Zeit beim Erstellen in Anspruch nimmt, daher bin ich für jeden Hinweis und Tipp sehr Dankbar Vielen Dank schonmal im voraus und liebe Grüße Niklas
×
×
  • Neu erstellen...