Jump to content

italianstallion

Members
  • Gesamte Inhalte

    75
  • Registriert seit

  • Letzter Besuch

Alle erstellten Inhalte von italianstallion

  1. Hi, mal weider krankes Vorhaben meinerseits...wie fange ich an? Mit import-csv lese ich sehr viele CSVs ein, die immer so aussehen: Name;Pfad;Pfad Wobei mich immer nur der Name und der erste Pfad interessiert. Mein Versuch: $names = $null $namespath = $null $hash1 = @{} foreach ($line in $lines) { $names += import-csv $path\$txtline\asdf.txt -delimiter ";" -header name,path1,path2 | select name $namepath += import-csv $path\$txtline\asdf.txt -delimiter ";" -header name,path1,path2 | select path1 $hash1 += @{$names=$namepath} } Lacht mich nicht aus, aber ich habe heute das erste Mal von Hashtables gehört ;) Weitere Fakten: - Import-csv würde ich gern verwenden, weil den Header hinzufügen kann, den gibt es in den gelieferten CSVs nämlich leider nicht - Die foreach arbeitet ein vorangestelltes "get-Childitem" ab, denn in in $path + dem Ergebnis von get-Childitem liegt immer eine asdf.txt, die ich alle einlesen muss - Einen, denke ich muss ich verwenden, weil ich später noch weitere Informationen aus komplett anderen Quellen hinzufügen muss um dann am Schluss alles Zusammen in eine CSV mit komplett anderer Struktur auszugeben Danke und Grüße
  2. Hi Nils, hab ich befürchtet, aber gut...ich versuchs mit Out-File. Hast du ein Gefühl was das Pfadlängenproblem angeht? :suspect: ...außer Kürzen natürlich! :D Grüße
  3. Hi, habe mir in meinem Skript aus allen Möglichen Quellen Informationen zusammengesammelt und in Variablen geschrieben. Dazu gehören unter anderem: Datum, anzahl Dateien,größe all dieser Dateien usw. Die Ergebnisse sollen nun in eine csv...also - denk ich mir - nutze ich export-csv Aaaaaaaaaaber: Das Cmdlet is n Krampf! Es schreibt seltsame Dinge in die csv, anstatt die eigentlichen Werte. Einen Hinweis auf mein Problem hab ich hier gefunden, verstehe aber nur Bahnhof: http://stackoverflow.com/questions/21047185/how-to-export-data-to-csv-in-powershell Er erzeugt vorher ein Objekt?! Check ich nich...ihr? ;) Eins noch: Beim zählen und Größe berechnen bekomme ich PFad zu lang Fehler. Kann ich das Umgehen? Wie komme ich trotzdem an die Infos für die Dateien, die in zu langen Pfaden liegen? Meldung: "get-childitem : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters." Grüße
  4. Aha...danke Blub. Auch interesssant. Habs mittlerweile gelöst indem ich [int]$sumtxt = get-childitem "$pfad" *.txt | Measure-Object -Property length -sum | Select-Object -expandproperty sum Sprich: Mit -expandproperty und dem Variablentyp int gehts...weiß zwarn icht warum, aber in erster Linie Wurscht! ;) Danke P.S.: Nächste Frage in nächstem Fred! ;)
  5. Hallo Powershell Freunde, heute möchte ich alle Textdateien in einem Pfad zählen und die Größe ermitteln. Mein Ansatz zählen: (get-childitem $pfad *.txt).count Funktioniert wie ich möchte. Die Größe ermitteln get-childitem "$pfad *.txt | Measure-Object -Property length -sum | Select-Object sum funktioniert auch, aber ich hätte gern GB angezeigt. Problem: /1GB funktioniert nicht. Habe versucht obiges Ergebnis in eine Variable des Typs [int] zu schreiben. Geht aber nicht, weil "Cannot convert value "@{Sum=228259984}" to type "System.Int32". Error: "Cannot convert the "@{Sum=228259984}" value of type" Kann ich die Ausgabe von select-object so umbiegen, dass ein int rauskommt mit dem ich rechnen kann? Danke und Grüße
  6. Hi, Den hostnamen habe ich dann wenn ich ein get-childitem mache und mir die Dateinamen einlese, sonst nicht, da sie variabel sind. Ich habe mir allerdings überlegt, dass ich vielleicht lieber die out-files zähle und die rdy-files zähle und mit -eq vergleiche. Jetzt stoße ich grade an ein anderes Problem: get-childitem $outpath *.out | select Name Gibt mir ja alle Namen zurück. Wenn ich nun ein get-content -path $outpath\$line | Out-File -FilePath $finalout -append mache, bekomme ich folgenden Fehler ($outpath habe ich natürlich vorher definiert und der Pfad stimmt) get-content : Cannot find path '\\mydomain.de\dfs\bla\bla\SCRIPTS\bla\POOL\bla\@{Name=asdf.out}' because it does not exist. Ist das @{Name=} mein Problem? Wenn ja: Wo kommt das her? Der Pfad an sich stimmt und die Dateien liegen dort auch drin...das einzige was nicht stimmt ist das @{Name=} Danke und Grüße Ist bissel unübersichtlich...hier die ganze Schleife: if($outcount -eq $rdycount){ $allouts = get-childitem $outpath *.out | select Name foreach ($line in $allouts){ get-content -path $outpath\$line | Out-File -FilePath $finalout -append } } Jetzt ist vielleicht klar wo $line herkommt... ;) Grüße Ups...bin mir nicht sicher warum, aber so gehts: if($outcount -eq $rdycount){ $allouts = get-childitem "$outpath" *.out -name foreach ($line in $allouts){ get-content -path $outpath\$line | Out-File -FilePath $finalout -append } } Get-Childitem -name anstatt | select name Danke ertsmal an alle!
  7. Hi Sunny, danke, Test-Path kenne ich und verwende ich auch. Mir ging es eher um die Logik, da ich nicht weiß welche HOSTNAMEN drin landen werden. Ich kenne nur die Endungen und weiß es muss pro Hostname eine rdy und eine out Dateo da sein. Deshalb muss ich vorher mit get-childitem einlesen und dann vergleichen o.ä.? Oder?
  8. Hi Leute, Spezialauftrag: Ich muss in einem PS Skript unter anderem folgendes tun...an diesem Teil scheitere ich gerade: - Zig Maschinen schreiben jeder jeweils zwei Dateien in ein Pool Verzeichnis hostname.out hostname.rdy - Nun kommt mein Skript und soll nachsehen ob immer die Datei-Pärchen da sind Falls ja: Eine Subroutine starten Falls nein: Nichts tun Versucht habe ich es mich mit "get-childitem"...das ist - glaube ich - auch richtig, aber das vergleichen ohne zu wissen was genau drin stehen könnte? Es können nämlich Maschinen hinzukommen und wegfallen...deshalb das get-childitem. Ideen? Danke und Grüße
  9. Hi, interessant...der Port fragt explizit den GC? Ich habe immer versucht -server mydomain.de um immer einen gültigen DC zu bekommen, falls sich die DCs ändern. Hab jetzt bei anderen Skripten immer wieder die Selben Fehler bekommen. Hab heute mal folgendes getestet: - Erst mit nslookup mydomain.de alle DCs rausgfunden - Dann mit - server alle einzeln versucht -> Jetzt tun manche und manche nicht Laut AD Sites and Services sind jedoch alle DCs GCs...sprich: Daran kanns nicht liegen, oder? Grüße
  10. Hi Dukel, meine Rückmeldung hat ein wenig gedauert, sorry. 1. Habs mit import und export-csv gelöst...und rockt jetzt richtig! Danke für den Tip! 2. Es waren Fehler wie dieser hier: The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.get-aduser : The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (eitherfrom ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracingas per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.At line:1 char:1+ get-aduser italianstallion+ ~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (italianstallion:ADUser) [Get-ADUser], ADException + FullyQualifiedErrorId : The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailI nFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.,Microsoft.ActiveDirectory.Management.Commands.GetADUser Oder auch nur ein "Internal oder local error ocurred" ...Problem ist: Es ist eine Multidomainumgebung und ich bin hier kein Domainadmin und keine Rechte. Wenn ich mit dem Parameter "-Server" spiele und andere Subdomains angebe geht es teilweise...ich kann aber nicht erkennen woran genau es liegt. Spätestens bei der Übergabe der Ergebnisse an "| get-adgroup" hing sich die Powershell aber immer auf ohne Fehlermeldung und ich musste den Prozess killen. Danke und Grüße
  11. hi, 1. Ups...das hätte ich machen können ja. Versuch ich noch! 2. Habs versucht, aber ich glaube es fehlt , laut Fehlermeldung, der RegKey MaxKerberosTokenSize auf den DCs. Und die sind nicht unter meiner Fuchtel Danke, ich meld mich!
  12. Hallo Leute, Heute folgendes Problem: Ich erstelle mit csvde eine Output Datei über alle User im AD mit einigen Attributen, die wichtig sind für diese Aktion. Problem ist: Der DN soll nicht drin sein, csvde baut ihn aber ein und ich bekomm ihn nicht raus. Da ich das csvde aus einem Powershell Sktipt starte, dachte ich: Warum nicht gleich damit den DN entfernen... Ausgabe ist folgende nur auf drei Zeilen gekürzt: DN,sn,givenName,department,sAMAccountName,telephoneNumber,mail,employeeID "OU=_USER,OU=test-ou,DC=my,DC=domain,DC=com",Nachname,Vorname,Abteilung,samacc,0123456,vorname.nachname@my.domain.com,personalnummer"OU=_USER,OU=test-ou,DC=my,DC=domain,DC=com",Mustermann,Max,GL,samacc,6543210,max.mustermann@my.domain.com,99999 Nu soll der DN raus...ich dachte mir ich trenne auf ", (Hochkomma und Komma) da eindeutig in jeder Zeile. Also: ForEach ( $line in $output) { ($dn,$rest) = $line.Split("'",'") write "dn= $dn" write "rest= $rest" } Habe versucht ", mit allen Mitteln zu maskieren...die Ausgabe ist aber immer Schrott. Meist ist "dn=" leer und "rest=" enthält die gesamte Zeile ohne " oder , Ist split vllt gar nicht angebracht an dieser Stelle? Bin für jede Hilfe dankbar! Stallion
  13. Freunde! Ihr seid großartig! Da ich den Output mit ForFilesn icht hinbekommen hab, hab ichs mit den letzten Posts doch mit Powershell versucht und tatataaaaa...es läuft und tut was es soll! Inklusive sehr geilem Log! Musste nur ein -encoding ans out-file hängen! $datum = Get-Date -Format 'yyyyMMdd_HHmm' $logdatum = Get-Date -Format 'yyyy-MM-dd - HH:mm:ss' $log = "D:\SKRIPTE\LOGS\alte_daten_aufraeumen_$datum-$env:computername.log" $cfg = "D:\SKRIPTE\alte_daten_aufraeumen.cfg" write-LOG "Startzeit: $logdatum" write-LOG write-LOG "Config: $cfg" Import-Csv $cfg -delimiter ';' | ForEach-Object { $pfad = $_.pfad $dateistring = $_.dateistring $alter = $_.alter write-LOG "Zu durchsuchender Pfad: $pfad" write-LOG "Zu suchende Dateistrings: $dateistring" write-LOG "Dateien löschen, die älter sind als: $alter" Get-ChildItem $pfad -recurse $dateistring -force | where {$_.lastwritetime -lt (get-date).AddDays($alter)} | Remove-Item -Force -verbose 4>&1 | Out-File $log -encoding UTF8 -append } write-LOG write-LOG "Endzeit: $logdatum" ############################################################################### # Subroutinen # Sub Ausgabe in Logdatei Function write-LOG { Param ([string]$logstring) Add-content $log -value $logstring } ############################################################################### Jetzt wäre es noch wichtig Systemvariablen wie %TMP% in der Config verwenden zu können...das wird aber schwierig, oder? Das import-csv liest den String %TMP% nämlich als Text ein...ich müsste die CSV erst nach %***% durchsuchen und dann umsetzen á la $out3 = [System.Environment]::ExpandEnvironmentVariables("$line") Oder gibts nen einfacheren Tip? Für den Anfang auf jedenfall: SEHR SEHR GEIL! :jau: Danke an alle!
  14. 1. Natürlich Perl, nicht Pearl :p 2. Werde ich gleich noch testen 3. Das Alter negativ is klar 3. Never ever...der Perl-Mann soll in Rente gehn! :D - Keine Sorge, er steht neben mir und liest mit! :D Grüße Naja...so funktionierts erstmal: $datum = Get-Date -Format 'yyyyMMdd_HHmm' $log = "D:\SKRIPTE\LOGS\alte_daten_aufraeumen_$datum-$env:computername.log" Import-Csv 'D:\SKRIPTE\alte_daten_aufraeumen.cfg' -delimiter ';' | ForEach-Object { $_.pfad $_.dateistring $_.alter forfiles /P $($_.pfad) /s /m $($_.dateistring) /d -$($_.alter) /c “cmd /c del @file” } Ihr werdet mich vermutlich rügen, weil ichs nu doch mit forfiles gelöst hab, denn: Tataaaaaaaa...jetzt kann ich lein Log schreiben! :D Verdammt...mein Log bleibt leer wenn ich ein ">> $log 2>&1" anhänge egal ob ich es ins “cmd /c del @file” reinpacke oder dahinter schreibe... Grüße und eine schönes Wochenende!
  15. Kinners...ich krich n Vogel gleich! Habs mit PS Mittel versucht...seit Stunden übrigens :confused: Mein Problem ist, dass Get-ChildItem $_.pfad -recurse $_.dateistring -force | where {$_.lastwritetime -lt (get-date).AddDays($_.alter)} | Remove-Item -Force ...immer alles löscht anstatt nur alles älter als $_.alter - In der ISE mit nem Breakpoint und Ausgabe der Variablen konnte ich sehen, dass alle drei Variablen korrekt geüllt sind - Der o.g. Befehl allein funktioniert auch ohne Variablen -> Ich denke mein Problem ist, dass $_.lastwritetime leer ist...aber warum?! Und weiter: Ich bekomm keinerlei Output aus der o.g. Zeile! Ist das normal? Weder Get-ChildItem noch Remove-Item erzeugt Ausgaben? Möchte später dann auch mal ein Log von meiner Löscherei... Habt ihr noch nen Tip? Oder gebt ihr auch gleich auf wie ich :cool: Gebs gleich an meinen Kollegen, der nen 5zeiler in Pearl draus machen soll... :D Dabei wollt ich das "winzige Ding" "mal eben kurz" in PS machen um den ersten Schritt weg von Pearl hin zu bekommen! :jau: Danke
  16. Hi Frank, danke, das hatte ich mittlerweile aus diesem guten Artikel verstanden: http://www.admin-source.de/BlogDeu/963/import-csv-workshop Jetzt hab ich noch zwei Showstopper: 1. Innerhalb von ForFiles werden die Variablen nicht aufgelöst. Habe versucht sie mit '' oder "" zu maskieren, hilft aber nicht. forfiles /P $_.pfad /s /m $_.dateistring /d -$_.alter /c “cmd /c del @file” 2. Würd ich gern Systemvariablen verwenden, wie zB %TMP%...das bekomm ich auch nicht hin. Klar ist, dass ich in PS $env: verwenden muss. Ich würde ja auch in der config Datei schon was brauchbares eintragen wie $env:TMP oder $TMP...aber das wird alles nicht aufgelöst. Muss das speziell maskiert werden? Danke
  17. Hi Frank, danke für den Ansatz. Da ich ForFiles direkt aus dem PS Skript aufrufen kann, konnte ich keinen Nachteil erkennen. Mit ForFiles wäre es in einer Zeile erledigt gewesen...ich versuch mein Glück. Was mir nicht klar ist an deinem Code Beispiel oben: - Muss ich das Löschen mit in die Schleife packen oder dort nur die Variablen füllen? und - Wie sage ich ihm, dass "$_.Pfad, $_.DateiString und $_.Alter" die Variablen genau so in genau dieser Reihenfolge zu verwenden sind? Wird das durch die Reihenfolge selbst vorgegeben? Bewege mich gerade das erste Mal jenseits von 1-5 zeiligen und einfachen Batches... Danke
  18. Tach Skript Freunde, wollte heute mal ein neues Skript bauen, das mir diverse Verzeichnisse von bestimmten Dateien mit bestimmtem Alter löscht. Dazu habe ich immer erfolgreich forfiles eingesetzt. Das möchte ich auch weiterhin tun...da aber öfter mal Verzeichnisse hinzukommen, alte weg fallen usw. dachte ich an eine config Datei, die ungefähr so aussehen könnte: Pfad;DateiString;Alter %TMP%;*.TMP;15 E:\Backups;EigeneDateien;30 usw. ...um damit folgenden Befehl zu füllen: forfiles /P VARIABLE1 /s /m VARIABLE2 /d -VARIABLE3 /c “cmd /c del @file” Hab dabei an Powershell und vllt Get-Content gedacht? Bin aber überhaupt nicht sicher ob das der richtige Ansatz ist. Müsste dem Get-Content sagen er soll immer bis zum Semikolon lesen =VARIABLE1, bis zum nächsten Semikolon VARIABLE2, dann VARIABLE3. Nächste Zeile bedeutet nächster forfiles Befehl... Bin für jeden Hinweis dankbar... ItalianStallion
  19. Hallo Zusammen, ich weiss das Thema is schon paar Tage alt, aber ich hab exakt, das Selbe Problem in exakt der selben Konstellation. Win7-SP1 und WinXP-SP3 im AD und Fileserver Netapp. Die beiden Rechner sehen unterschiedliche Stände in Netzlaufwerken. Ich kann auch keinen Zusammenhang feststellen. Manchmal drück ich zwischen 10 und 20 mal F5 und die eben erstellte Datei erscheint auf dem anderen Rechner, manchmal muss ich 50mal F5 drücken, manchmal muss ich einfach nur 10, 20 oder 30min. warten und manchmal hilgt n Neustart. Ich sehe keinen Zusammenhang. Es ist auch nicht so, dass alle Win7 Rechner im Netz die dateien sehen und nur die WinXP nich oder umgekehrt. Haben schon folgendes versucht laut MS: netsh int tcp set global chimney=disabled netsh int tcp set global rss=disabled netsh int ip set global taskoffload=disabled netsh int tcp set global autotuninglevel=disabled netsh int tcp set global congestionprovider=none netsh int tcp set global ecncapability=disabled netsh int tcp set global timestamps=disabled reg add "HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters" /v EnableTCPA /t REG_DWORD /d "0" /f @Truhe72 Habt ihr das Problem gelöst? Danke und Grüße Stallion
  20. Du wirst lachen, aber ich hab mir die Hilfe angeschaut, aber egal ob ich -v "/vol/volname" oder nur "volname" oder -s "sharename" eingebe, es kommt entweder die Syntaxhilfe oder er konnte das VOL oder den SHARE nicht finden. Kann es sein, dass er noch eine "option" will á la -c, -d oder da waren noch paar andere Grüße
  21. Yeah, du bist der Größte! ;-) Habs eben selbst gefunden...Cache steht auf 24 Stunden...hätte auch Geduldig sein können! SID gelöscht und gleich nochmal mit cifs lookup abgefragt und BAM kam der richtige Name zurück...nicht nur Problem gelöst sondern für die Zukunft gleich etwas mit über den Filer gelernt! Danke Stallion Ach und: Ich bekomm mit fsecurity nix vernünftiges zurück! Bin glaub ich zu doof für die Syntax! ;)
  22. Meinst ich kann vllt mit cifs sidcache clear sid die SID aus dem Cache schmeissen? Dann müsste er ja theoretisch neu bei den DCs anfragen oder? Dabei frag ich mich wie der Cache eingestellt ist? Gruß
  23. cifs testdc und auch cifs domaininfo bringen die beiden DCs zurück, die existieren. Und beide DCs haben den Gruppennamen durch die Repl bekommen. Gruß
  24. Ei ei ei...bei fsecurity bekomm ich keinen Output. Es stimmt wohl was mit der Syntax nicht und ich kriegs nich vernünftig hin... Hab aber nochmal cifs lookup ausgeführt...diesmal auf die richtige SID...und siehe da: Er gibt den alten Gruppenname zurück! Sorry, dass ichs vorhin nich bemerkt hab, muss wohl gepennt haben! Was sagt mir das jetzt? Der Filer hat holt keine vernünftigen Infos von den DCs? Danke Stallion
  25. Servus Carlito und Danke für deine Rückmeldung! cifs lookup %SID% gibt den richtigen Namen zurück...wobei ich eigentlich davon ausgehen würde, dass der Filer was das Listing der ACLs angeht keine Rolle spielt auch wenn er die Files hostet. Vielleicht noch eine Idee? Was macht denn mein Client in dem Moment wo ich mir die SecurityEinstellungen auflisten lasse? Fragt er seinen LOGONSERVER an um die SIDs aufzulösen? Grüße Stallion
×
×
  • Neu erstellen...