2017-02-02 2 views
0

Wahrscheinlich eine dumme Frage, aber entweder meine Googling-Fähigkeiten haben sich prächtig verschlechtert - oder niemand sonst scheint diese Art von Fragen zu beantworten.PowerShell - ForEach Ausgabe an Variablen zur Verwendung mit MySQL

Beginnen wir mit dem, was mein Endziel ist, also können wir sehen, wie ich es dahin gebracht habe, wo ich bisher bin: Ich würde gerne ein Skript ausführen, das automatisch einen Schlag von Pfaden für die Ordnergröße prüft. Ich möchte dafür die Ordnergröße in GB zurückgeben. Ich möchte dann die Ordnergrößen in eine MySQL-Datenbank importieren, die ich für Berichtszwecke eingerichtet habe.

Überraschenderweise (und etwas nicht überraschend), nur die Ordnergrößen zu bekommen war ein ziemlich heftiger Schmerz, gestern. Ging durch eine Reihe von verschiedenen Versuchen/Funktionen von anderen Leuten in den Interwebs/etc. So

, hier, wo ich am Ende:

$dirlist = import-csv C:\Users\Public\Folders.csv 
foreach ($path in $dirlist) 
{ 
    $name = $path.name 
    echo $path >> C:\Users\Public\sizes.txt 
    $totalsize = (Get-ChildItem $name -recurse -force | measure-object -property length -sum) 
    "{0:N2}" -f($totalsize.sum/1GB) >> C:\Users\Public\sizes.txt 
} 

Das ist ziemlich gut, glaube ich. Es gibt mir eine Liste aller Größen, auf ihren eigenen Linien. Ich muss nur jeder Größe eine eigene Variable zuweisen. Also nahm ich - wie ein Idiot - an, dass ich die Variable einfach in der Datei "Folders.csv" mit einer "var" -Spalte vorbelegen könnte.

Also habe ich das getan.

Dann modifizierte ich das Drehbuch, etwa so:

$dirlist = import-csv C:\Users\Public\Folders.csv 
function Get-FolderSize 
{ 
    $name = $path.name 
    $var = $path.var 
    $totalsize = (Get-ChildItem $name -recurse -force | measure-object -property length -sum) 
    "{0:N2}" -f($totalsize.sum/1GB) -outvariable $var 
} 
foreach ($path in $dirlist) 
{ 
    Get-FolderSize 
} 

Aber dies ergibt die folgenden Fehler (e):

At line:12 char:39 
+  "{0:N2}" -f($totalsize.sum/1GB) -outvariable $var 
+          ~~~~~~~~~~~~ 
Unexpected token '-outvariable' in expression or statement. 
At line:12 char:52 
+  "{0:N2}" -f($totalsize.sum/1GB) -outvariable $var 
+             ~~~~ 
Unexpected token '$var' in expression or statement. 
    + CategoryInfo   : ParserError: (:) [], ParentContainsErrorRecordException 
    + FullyQualifiedErrorId : UnexpectedToken 

als Referenz, die Folders.csv ist im Grunde nur das:

tl; dr // CSV von mehreren Dateipfaden -> Get Size in GB -> Speichern Sie jede Größe in bestimmten Variablen

Antwort

0

können Sie Loop-Objekt für den Parameter wie folgt übergeben:

$dirlist = import-csv "C:\Users\Public\Folders.csv" 

function Get-FolderSize($objectVar) 
{ 
    $name = $objectVar.name 
    $totalsize = (Get-ChildItem $name -recurse -force | measure-object -property length -sum) 
    $objectVar.var="{0:N2}" -f ($totalsize.sum/1GB) 
} 

foreach ($path in $dirlist) 
{ 
    Get-FolderSize $path 
} 

$dirlist 
+0

Ah, ok - so dass ausgeben wird die $ dirlist, aber mit den Variablennamen auf die Größenwerte geändert. Was, ich nehme an, dass ich dann einfach eine Spalte für die ID hinzufügen kann, und dann ist es nur ein weiterer "foreach" -Befehl, um es zu MySQL zu verschieben? '$ dirlist | foreach { query = "UPDATE Server SET Größe = '$ ($ _. var)' WHERE ID = '$ ($ _. id)'" Ausführen-MySQLNonQuery $ conn $ query' – Steve

Verwandte Themen