Jump to content

italianstallion

Members
  • Content Count

    75
  • Joined

  • Last visited

Community Reputation

11 Neutral

About italianstallion

  • Rank
    Newbie
  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
×
×
  • Create New...