【发布时间】:2018-01-18 13:56:32
【问题描述】:
编写了一个脚本来监视文件夹中的新文件。当 onCreated 被调用时,它会增加到我列表中的下一个驱动器号,然后检查该驱动器的可用空间。如果可用空间在我的要求之下,它会再次增加。我的完整脚本在 ISE 中运行良好。
这是一个简化版本,我仍然无法开始工作。
当在 PowerShell 中运行时,它卡在$DriveVar 上并且只输出“marker1”。如果您在 ISE 中运行,marker2 行会正确旋转您复制到文件夹中的每个文件的驱动器号。
$filter = '*.*'
$Watchfolder = "C:\Script\watch"
$LocationArray = "L","J","K","Q","S"
$LocationCount = [int]$LocationArray.Count
$LastUsed = [int]0
$Watcher = New-Object IO.FileSystemWatcher $Watchfolder, $filter -Property @{
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite' }
$onCreated = Register-ObjectEvent $Watcher Created -SourceIdentifier FileCreated -Action {
$Freespace = [long]-1
while ($Freespace -le 0) {
$LastUsed++
if ($LastUsed -ge $LocationCount) {
$LastUsed = 0 }
Write-Host "marker1"
$DriveVar = $LocationArray[$LastUsed]
Write-Host "marker2 $DriveVar"
$Freespace = 5
}
}
PowerShell 中的输出:
标记1ISE 中的输出:
标记1 标记2 J 标记1 标记2 K 标记1 标记2 Q我尝试为 $DriveVar 和其他一些东西(都在 ISE 中工作)调用一个函数,但我似乎无法让它工作。如果我自己使用 while 循环(没有 onCreated),它在 Powershell 中可以正常工作。
【问题讨论】:
-
如果关闭 ISE,然后重新启动并运行脚本,它在 ISE 中是否仍能正常工作?如果是这样,这可能是 STA 与 MTA 的问题,我们或许可以解决这个问题。
-
“如果关闭 ISE,然后重新启动并运行脚本,它在 ISE 中是否仍然可以正常工作”刚刚测试过,是的。
-
尝试使用
-Mta参数启动powershell.exe,看看你的脚本在这样运行时是否仍然挂起。 -
我尝试了 -Mta 和 -Sta(不确定默认是什么)仍然挂在同一个位置。
-
这在 2012R2 / PS4.0 上,但也在 Win7 / PS3.0 上测试,结果相同。
标签: powershell while-loop file-watcher