Мне нужно получить список файлов из каталога, который не должен содержать неполные файлы (т.е.Файлы, которые в данный момент копируются в каталог)
Как я могу получить Get-ChildItem для исключения неполных файлов?
Мне нужно получить список файлов из каталога, который не должен содержать неполные файлы (т.е.Файлы, которые в данный момент копируются в каталог)
Как я могу получить Get-ChildItem для исключения неполных файлов?
Возможно, вам удастся создать "тестовую" функцию, которая пытается получить эксклюзивную блокировку для файла, который вы собираетесь копировать. Если монопольная блокировка завершится успешно, это будет означать, что файл все еще не копируется. В PowerShell у вас есть доступ к классам библиотеки .Net Framework, которые в этом случае можно найти в Системе.Библиотека 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"
}