Как сохранить PowerShell от открытия файла Excel, если он уже открыт? - PullRequest
0 голосов
/ 30 января 2019

Мне нужно открыть файл B при изменении файла A, а затем разрешить файлу B открыть файл A без повторного запуска наблюдателя.Я думаю, что я могу сделать это с помощью оператора if в $ changeAction, который проверяет, открыт ли файл B первым.

Я предполагаю, что это будет что-то вроде:

если (файл B открыт, то ничего не делать, иначе открыть файл B)

Как мне написать это в Powershell?

 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") #this should be the 'else' in the 'if File B is open#

        ')

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

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

1 Ответ

0 голосов
/ 30 января 2019

Для этого вы можете проверить, запущен ли какой-либо процесс Excel, открывший определенный файл.

Get-CimInstance Win32_Process -Filter "CommandLine like '%filepath.xlsx%'"

На основе вывода вышеприведенного выражения вы можете выбрать, открывать ли файл илинет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...