【发布时间】:2019-10-14 14:30:48
【问题描述】:
我编写了一个函数来检查共享网络驱动器中的另一个进程/用户是否正在使用/锁定 excel 文件,如果使用,则暂停脚本并继续检查直到它可用,因为下一个操作是将其移出它的文件夹。但是,当我使用 System.IO 读取文件时,它不会打开文件。我在本地驱动器上进行了测试,这确实打开了文件,但这在网络驱动器中不起作用吗?
$IsLocked = $True
Function Test-IsFileLocked {
[cmdletbinding()]
Param (
[parameter(Mandatory=$True,ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$True)]
[Alias('FullName','PSPath')]
[string[]]$Path
)
Process {
while($isLocked -eq $True){
If ([System.IO.File]::Exists($Path)) {
Try {
$FileStream = [System.IO.File]::Open($Path,'Open','Write')
$FileStream.Close()
$FileStream.Dispose()
$IsLocked = $False
} Catch {
$IsLocked = $True
echo "file in use, trying again in 10 secs.."
Start-Sleep -s 10
}
}
}
}
}
这是代码无法在我的函数中拾取/打开 excel 文件的地方
$FileStream = [System.IO.File]::Open($Path,'Open','Write')
这是程序调用函数的地方。循环通过网络驱动器中的项目文件夹,如果项目与模式匹配,则将调用函数以检查文件是否正在使用:
$DirectoryWithExcelFile = Get-ChildItem -Path "Z:\NetworkDriveFolder\"
$DestinationFolder = "Z:\DestinationFolder\"
$pattern = "abc"
foreach($file in $DirectoryWithExcelFile){
if($file.Name -match $pattern){
Test-IsFileLocked -Path $file
$destFolder = $DestinationFolder+$file.Name
Move-item $file.FullName -destination $destFolder
break
}
}
【问题讨论】:
-
你没有正确处理锁
标签: powershell network-drive filelock