Вы можете проверить, работает ли Блокнот, а затем запустить новый экземпляр, если это не так. Например, измените эту часть вашего скрипта:
$FileExists = Test-Path $dest
If ($FileExists -eq $True) {C:\Windows\notepad.exe}
}
На что-то вроде:
if ((Test-Path $dest) -and ((Get-Process | Where Id -eq $procId) -eq $null))
{
$procId = (Start-Process -FilePath "C:\Windows\notepad.exe" -PassThru).Id
}
Это проверяет только тот экземпляр Notepad, который вы ранее запустили из своего скрипта, но игнорирует любые копии, запущенные другими способами. Вы можете легко изменить его для поиска любого экземпляра Блокнота.
У меня были некоторые проблемы с вашим кодом, которые не давали ему работать, даже без этого изменения, поэтому я немного подправил его. Код ниже должен работать правильно:
$watcher = New-Object System.IO.FileSystemWatcher
# Path of folder to watch
$watcher.Path = "C:\Users\CELINE\Desktop\Testing4"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
$procId = -1
$i = 1
# Action executed when changes detected
$action =
{
# SourcePath
$path = $Event.SourceEventArgs.FullPath
#Destination path
$targetFile = "C:\Users\CELINE\Desktop\PowerShellChanges2\Request.csv"
# Add Log file to monitor the changes
Add-content -Path "C:\Users\CELINE\Desktop\logtest5.txt" `
-value "$(Get-Date), $($Event.SourceEventArgs.ChangeType), $path"
# Move file
Move-Item -Path $path -Destination $targetFile
# Rename file
If (Test-Path $targetFile)
{
$renamefile = "C:\Users\CELINE\Desktop\PowerShellChanges2\Request($i).csv"
Rename-Item -Path $targetFile -NewName $renamefile
}
# Execute Notepad
if ((Test-Path $renamefile) -and ((Get-Process | Where Id -eq $procId) -eq $null))
{
$procId = (Start-Process -FilePath "C:\Windows\notepad.exe" -PassThru).Id
}
$i++
}
# Register event
Register-ObjectEvent $watcher "Changed" -Action $action | Out-Null
# Wait
while ($true)
{
Sleep 0
}