パスが長すぎますが、そうではありませんか?

パスが長すぎますが、そうではありませんか?

ファイル共有に対してを実行しようとGet-ChildItem -Recurseすると、「パスが長すぎます」というエラーがいくつか発生します。 しかし、詳しく調べてみると、いくつかはそうではありません。

私は を使用して-ErrorVariable、エラーの詳細を という変数にキャプチャしています$ErrLog。次に、次のようにして、それらを CSV に記録します。

if ($ErrLog.Length -ne 0)
{
    $ErrLog | ForEach-Object {

        # Gather details of interest.
        $ErrTarget = $_.TargetObject
        $ErrReason = $_.CategoryInfo.Reason

        # Write data to custom PowerShell object.
        $ErrObject = New-Object PSObject
        $ErrObject | Add-Member -MemberType NoteProperty -Name 'Target Path' -Value $ErrTarget
        $ErrObject | Add-Member -MemberType NoteProperty -Name 'Error Reason' -Value $ErrReason

        # Add error to log variable.
        $ErrList += $ErrObject
    }
}

# Announce number of errors, and write to log as needed.
if ($ErrList.Length -eq 0)
{
    Write-Output "No errors encountered.`n"
}
else
{
    $ErrList | Export-CSV $LogErrors -NoTypeInformation
    $ErrorsCount = $ErrList.Length
    Write-Output "Logged $ErrorsCount errors.`n"
}

上記のコードは正常に動作しているように見えますが、そこから取得するデータはエラーの詳細と完全には一致しません。

コンソールのエラー詳細には、ファイル名は 260 文字未満、ディレクトリ名は 248 文字未満でなければならないと書かれています。これは十分に理にかなっています。しかし、ログに記録されているパスはすべてディレクトリであり、その一部は 200 文字未満です。

ログにある最長のものは 259 文字です。この文字と、248 文字を超える他の文字は意味をなします。ただし、最短のものは 186 文字で、248 文字より短いものもたくさんあります。

パスが長すぎるというエラーが、実際にはそうではないディレクトリで表示されるのはなぜですか? エラー データが伝えるべき内容が、ログに記録されていないだけなのでしょうか?

関連情報