Get-ChildItem에서 불완전한 파일 제외

Get-ChildItem에서 불완전한 파일 제외

불완전한 파일(현재 디렉토리에 복사된 iE 파일)을 포함해서는 안 되는 디렉토리에서 파일 목록을 가져와야 합니다.

불완전한 파일을 제외하도록 Get-ChildItem을 얻으려면 어떻게 해야 합니까?

답변1

복사하려는 파일에 대해 배타적 잠금을 얻으려고 시도하는 "테스트" 기능을 만들 수도 있습니다. 배타적 잠금이 성공하면 파일이 아직 복사되지 않았음을 의미합니다. PowerShell 내에서 .Net Framework 라이브러리 클래스에 액세스할 수 있으며, 이 경우 System.IO 라이브러리에서 찾을 수 있습니다. 가능한 샘플 스크립트는 다음과 같습니다. 이를 C:\Temp 디렉터리에 복사하고 몇 가지 텍스트 파일을 만듭니다. Microsoft Word나 파일을 잠그는 일부 프로그램(메모장은 작동하지 않음)을 사용하여 하나 이상의 텍스트 파일을 엽니다. 잠기지 않은 모든 파일이 출력될 것으로 예상할 수 있습니다.

function Test-UnLockedFile
{
    param([string] $fileNameAndPath)

    try
    {
        Write-Host "Test-LockedFile called with $fileNameAndPath"

        $fileInfo = New-Object ('System.IO.FileInfo') "$fileNameAndPath"

        $fileStream = $fileInfo.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)

        $fileStream.Close()

        Write-Host "Test-LockedFile found an unlocked file (i.e. `$true)"

        $true        
    }
    catch
    {
        Write-Host "Test-LockedFile found a locked file (i.e. `$false)"
        $false
    }
}


$files = Get-ChildItem -Path "C:\Temp\" -Exclude *.ps1

$unlockedFiles = $files | Where-Object { Test-UnLockedFile $_.FullName }

foreach ($file in $unlockedFiles)
{
    $name = $file.FullName
    Write-Host "Found unlocked file at $name"
}

관련 정보