Запуск сценария powershell при выходе из системы с управлением процессом - PullRequest
0 голосов
/ 02 октября 2019

Контекст: нам нужно запустить скрипт выхода, который сохраняет некоторые локальные файлы в удаленном месте. Поскольку некоторые пользователи используют медленное VPN-соединение, мы сжимаем их, используя 7z, и загружаем только те файлы, которые изменились с прошлого раза. Проблема заключается в запуске процесса, который не ожидает 7z для правильного завершения, когда сценарий запускается событием выхода из системы.

Вот часть моего сценария:

    $7z = "C:\Program Files\7-Zip\7z.exe"
    $files = @("file1.config","file2.nsf") # more files in real
    $archiveFile = "C:\temp\archive.7z" 

    function get-md5{
        param(
            [parameter(Mandatory=$true)]$file
        )

        if (! (test-path $file)){
            "$file n'est pas accessible"
        }else{
            $methode = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
            $stream = [System.IO.File]::Open( $file , [System.IO.Filemode]::Open, [System.IO.FileAccess]::Read)
            $hash = [System.BitConverter]::ToString($methode.ComputeHash($stream))
            ($hash -split("-") -join("")).toLower()
            $stream.close();
        }
    }


    "Zipping"
    start-process $7z -ArgumentList "a -mx7 $archiveFile $files" -NoNewWindow -Wait -RedirectStandardError "D:\7zErrLog.txt" -RedirectStandardOutput "D:\7zLog.txt"
    $md5 = get-md5 $archiveFile

    ##Continue Script : If md5 has changed, upload to server...

Iполучаю эту ошибку:

The process cannot access the file <filename here> because it is being used by another process at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) [...]

Я использовал handle64.exe из sysInternals и обнаружил, что get-md5 не может открыть файл в режиме чтения, потому что 7z.exe все еще блокирует его...

Если я запускаю сценарий вручную (а не когда пользователь выходит из системы), сценарии работают нормально.

Любая помощь приветствуется

...