как открыть последние открытые файлы в ISE при запуске - PullRequest
3 голосов
/ 12 ноября 2009

я хотел автоматически открыть последние открытые файлы в ISE с помощью шикарного скрипта, поэтому я попытался сохранить пути к файлам этих файлов, как показано ниже.

$action = { $psISE.CurrentPowerShellTab.Files | select -ExpandProperty FullPath | ? { Test-Path $_ } |<br> Set-Content -Encoding String -Path$PSHOME\psISElastOpenedFiles.txt<br> Set-Content -Encoding String -Value "Now exiting..." -Path c:\exitingtest.log<br> }<br> Register-EngineEvent -SourceIdentifier Exit -SupportEvent -Action $action<br> <br>

когда я закрываю ISE, создается файл exitingtest.log с именем "Сейчас выходит ...", но psISElastOpenedFiles.txt не создан. кажется, что ISE закрывает все открывающиеся файлы перед выполнением события выхода.

я должен использовать событие таймера?

Ответы [ 2 ]

3 голосов
/ 13 ноября 2009

Вместо сохранения при выходе сохраните информацию MRU, когда объекты CurrentTabs и Files вызывают событие CollectionChanged. Это аддон MRU ISE, который я использую:

# Add to profile
if (test-path $env:TMP\ise_mru.txt)
{
    $global:recentFiles = gc $env:TMP\ise_mru.txt | ?{$_}
}

else
{
    $global:recentFiles = @()
}

function Update-MRU($newfile)
{
    $global:recentFiles = @($newfile) + ($global:recentFiles -ne $newfile) | Select-Object -First 10

    $psISE.PowerShellTabs | %{
        $pstab = $_
        @($pstab.AddOnsMenu.Submenus) | ?{$_.DisplayName -eq 'MRU'} | %{$pstab.AddOnsMenu.Submenus.Remove($_)}
        $menu = $pstab.AddOnsMenu.Submenus.Add("MRU", $null, $null)
        $global:recentFiles | ?{$_} | %{
            $null = $menu.Submenus.Add($_, [ScriptBlock]::Create("psEdit '$_'"), $null)
        }
    }
    $global:recentFiles | Out-File $env:TMP\ise_mru.txt
}

$null = Register-ObjectEvent -InputObject $psISE.PowerShellTabs -EventName CollectionChanged -Action {
    if ($eventArgs.Action -ne 'Add')
    {
        return
    }

    Register-ObjectEvent -InputObject $eventArgs.NewItems[0].Files -EventName CollectionChanged -Action {
        if ($eventArgs.Action -ne 'Add')
        {
            return
        }
        Update-MRU ($eventArgs.NewItems | ?{-not $_.IsUntitled}| %{$_.FullPath})
    }
}

$null = Register-ObjectEvent -InputObject $psISE.CurrentPowerShellTab.Files -EventName CollectionChanged -Action {
    if ($eventArgs.Action -ne 'Add')
    {
        return
    }
    Update-MRU ($eventArgs.NewItems | ?{-not $_.IsUntitled}| %{$_.FullPath})

}

Update-MRU
1 голос
/ 13 ноября 2009

Я пытался сделать это несколько месяцев назад и обнаружил, что состояние гонки мешает этому работать в 95% случаев. Коллекция вкладок в объектной модели ISE обычно удаляется до обработки события powershell.exiting. Тупой, да. Исправимо, нет.

-Oisin

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