如何停止Powershell观看文件几秒钟?

时间:2019-01-29 14:10:50

标签: excel vba powershell

我正在用Powershell编写一些文件,以监视文件“ A”的更改并在打开时打开文件“ B”。唯一的问题是Excel文件(B)具有在打开状态下运行的vba代码,该代码必须复制文件“ A”上的数据。从我的研究看来,我必须打开文件'A'来执行此操作,因为它必须是.xlsx并打开它会启动连续循环。

我已经尝试过sleep命令,但是看起来它在睡眠期间或睡眠之前仍在观看文件,然后在等待了我告诉它的时间后再次打开文件。

如何让观察者停止观看一分钟左右?

这是我目前正在使用的代码:

    Function Register-Watcher {
    param ($folder)
    $filter = "*.xlsx"
    $folder = "\\powershell\watcher\test\folder"

    $watcher = New-Object IO.FileSystemWatcher $folder, $filter -Property @{ 
        IncludeSubdirectories = $false
        EnableRaisingEvents = $true


    }

    $changeAction = [scriptblock]::Create('

        $path = $Event.SourceEventArgs.FullPath
        $name = $Event.SourceEventArgs.Name
        $changeType = $Event.SourceEventArgs.ChangeType
        $timeStamp = $Event.TimeGenerated

        Write-Host "The file $name was $changeType at $timeStamp"

        $Excel = New-Object -ComObject Excel.Application
        $Excel.Workbooks.Open("\\powershell\watcher\test\folder\fileB.xlsm")
        sleep 60

    ')

    Register-ObjectEvent $Watcher "Changed" -Action $changeAction
}

 Register-Watcher "\\powershell\watcher\test\folder\fileA.xlsx"
 $Change

1 个答案:

答案 0 :(得分:1)

您可以使用

阻止它引发事件
$watcher.EnableRaisingEvents = $false

您可以在此处从Microsoft了解更多信息

https://docs.microsoft.com/en-us/dotnet/api/system.io.filesystemwatcher.enableraisingevents?view=netframework-4.7.2#System_IO_FileSystemWatcher_EnableRaisingEvents