Powershell &引用;[“和”和“];角色搞乱获取子项

Powershell &引用;[“和”和“];角色搞乱获取子项,powershell,directory,get-childitem,Powershell,Directory,Get Childitem,使用PowerShell 4.0, 我试图得到多个目录的大小,我得到的结果在windows告诉我的和我的代码告诉我的之间非常不一致 有关守则是: $temp4 = ($folderInfo.rootFolder).fullname $folderInfo.directories += Get-ChildItem -LiteralPath $temp4 -Recurse -Force -Directory $folderInfo.directories += $folderInfo.rootFol

使用PowerShell 4.0, 我试图得到多个目录的大小,我得到的结果在windows告诉我的和我的代码告诉我的之间非常不一致

有关守则是:

$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:无法检索cmdlet的动态参数。指定的通配符模式无效:示例[示例] 在C:\powershell scripts\test.ps1:55 char:12 +$temp=(Get ChildItem$dir.fullname-Force-File | Measure Object-Property l。。。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:InvalidArgument:(:)[Get ChildItem],ParameterBindingException +FullyQualifiedErrorId:GetDynamicParametersException,Microsoft.PowerShell.Commands.GetChildItemCommand

如果
D:\sample
的子文件夹中包含一个文件夹,即
“[sample”
,则情况也是如此。除了问题目录中或之外的任何内容,我将从其他所有内容中获得正确的结果。
$dir.pspath
$dir.fullname
都会把事情搞砸

编辑:更改上述代码以反映其当前状态,并包含完整错误。

再次编辑:上面的代码现在有一些调试临时变量。

使用
-LiteralPath
参数代替
-Path
,以抑制通配符全球化。此外,由于您使用的是V4,因此可以使用
-Directory
开关并省去
$\iscontainer
过滤器:

$folderInfo.directories = 
 Get-ChildItem -LiteralPath $folderInfo.rootFolder -Recurse -Force -Directory 
如果目录树下有更多的方括号,请在后续的Get ChildItem命令中继续使用literpath:

$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

我更改了我的代码以反映您的建议,我仍然收到错误。编辑问题并发布更新的代码和确切的错误消息。更改了我的原始邮件更改了我的原始答案我再次更改了上述代码。虽然我很快就找到了罪魁祸首,-recurse参数查找通配符,而不考虑文字路径。th是基于为递归参数提供的详细信息而假定的。