2014-02-06 2 views
4

Использование PowerShell 4.0, Я пытаюсь получить размер нескольких каталогов, и я получаю очень противоречивые результаты между тем, что мне говорят окна и что мой код говорит мне ,"[" and "]" characters mess get get-childitem

Код в вопросе:

$temp4 = ($folderInfo.rootFolder).fullname 
$folderInfo.directories += Get-ChildItem -LiteralPath $temp4 -Recurse -Force -Directory 
$folderInfo.directories += $folderInfo.rootFolder 
foreach ($dir in $folderInfo.directories) 
{ 
    $temp3 = $dir.fullname 
    $temp2 = Get-ChildItem -LiteralPath $temp3 -Force 
    $temp = (Get-ChildItem -LiteralPath $dir.fullname -Force -File | Measure-Object -Property length -Sum -ErrorAction SilentlyContinue).Sum 
    $folderInfo.totalSize += $temp 
} 
return $folderInfo 

если $folderInfo.rootFolder = D:\sample тогда я получаю то, что я хочу , но если $folderInfo.rootFolder = D:\[sample тогда я получаю

Get-ChildItem: Не удается получить динамические параметры командлет. Неверный шаблон шаблона подстановки: sample [sample В сценариях C: \ powershell \ test.ps1: 55 char: 12 + $ temp = (Get-ChildItem $ dir.fullname -Force -File | Measure-Object - Свойство l ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException + FullyQualifiedErrorId:. GetDynamicParametersException, Microsoft.PowerShell.Commands.GetChildItemCommand

то же самое справедливо, если D:\sample содержит папку где-то в нем дети, что является "[sample" I получат правильные результаты от всего остального, но что-нибудь в или за пределами m. Оба $dir.pspath и $dir.fullname завинчивают вещи вверх.

Редактировать: изменил приведенный выше код, чтобы отразить его текущее состояние, и включил полную ошибку.
edit again: В приведенном выше коде есть несколько переменных отладки temp.

ответ

10

Используйте параметр -LiteralPath вместо -Path, чтобы подавить подстановочный знак. Кроме того, так как вы используете V4, вы можете использовать переключатель -Directory и обойтись без $_.iscontainer фильтра:

$folderInfo.directories = 
Get-ChildItem -LiteralPath $folderInfo.rootFolder -Recurse -Force -Directory 

Если у вас есть больше Squre скобки дальше вниз по дереву каталогов, продолжайте использовать literpath в последующих командах Get-ChildItem :

$folderInfo.directories += Get-ChildItem -LiteralPath $folderInfo.rootFolder -Recurse -Force -Directory 
    $folderInfo.directories += Get-Item -LiteralPath $folderInfo.rootFolder 
    foreach ($dir in $folderInfo.directories) 
    { 
     $temp2 = Get-ChildItem -LiteralPath $dir.PSPath -Force 
     $temp = (Get-ChildItem -LiteralPath $dir.fullname -Force -File | Measure-Object -Property length -Sum -ErrorAction SilentlyContinue).Sum 
     $folderInfo.totalSize += $temp 
    } 
    return $folderInfo 
+0

Я изменил свой код, чтобы отразить ваше предложение, я все еще получаю сообщение об ошибке. – icomeinpieces

+0

Редактировать вопрос и опубликовать обновленный код и точное сообщение об ошибке. – mjolinor

+0

изменен мой исходный пост – icomeinpieces

 Смежные вопросы

  • Нет связанных вопросов^_^