italianstallion
-
Gesamte Inhalte
75 -
Registriert seit
-
Letzter Besuch
Beiträge erstellt von italianstallion
-
-
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
-
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
-
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! ;)
-
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
-
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!
-
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?
-
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
-
probiers doch mal mit einer Globalcatalogabfrage gegen einen DC deiner Domäne:
-server myDC:3268
blub
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
-
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
-
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!
-
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
-
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!
- 1
-
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!
-
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
-
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
-
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
-
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
-
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
-
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
-
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! ;)
-
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ß
-
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ß
-
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
-
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
PS - Mit Import CSV in Hash schreiben
in Windows Forum — Scripting
Geschrieben
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:
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