2017-02-02 11 views
0

Вероятно, это глупый вопрос, но мои способности в отношении Google увеличились великолепно - или никто больше не спрашивает/не отвечает на подобные вещи.PowerShell - ForEach Вывод на переменные для использования с MySQL

Начнем с того, что моя конечная цель, поэтому мы можем видеть, как я добрался до места, где я до сих пор: я хотел бы запустить скрипт, который автоматически проверяет пут путей для размера папки. Я бы хотел, чтобы он возвращал размер папки в GB. Затем я хотел бы импортировать размеры папок в базу данных MySQL, которую я установил для целей отчета.

Удивительно (и несколько неудивительно), только вчера, когда размеры папок были довольно тяжелой болью. Прошел через множество различных попыток/функций от других людей в interwebs/etc.

Итак, вот где я кончался:

$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 
} 

Это очень хорошо, я думаю. Он дает мне список всех размеров, в их собственных строках. Мне просто нужно назначить каждый размер своей собственной переменной. Итак, я предположил - как идиот - что я мог бы просто предварительно назначить переменную в файле Folders.csv, используя столбец «var».

Итак, я сделал это.

Затем я изменил сценарий, например, так:

$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 
} 

Но это дает следующую ошибку (ы):

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 

Для справки, Folders.csv в основном только это:

"name","var" 
"\\Server\D$\Folder","Folder1" 
"\\Server2\G$\Folder","Folder2" 

tl; dr // CSV нескольких путей к файлам -> Получить размер в GB -> хранить каждый размер в указанных переменных

ответ

0

вы можете передать объект цикла с параметром, как это:

$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

Ах, хорошо, - так что выход будет на $ DirList, но с именами переменных изменены на значения размера. Который, я предполагаю, что я могу просто добавить столбец для ID, а затем это просто еще одна команда «foreach», чтобы перевести ее в MySQL? '$ dirlist | foreach { query = "UPDATE servers SET Size = '$ ($ _. var)' WHERE ID = '$ ($ _. id)'" Execute-MySQLNonQuery $ conn $ query' – Steve