我想用posh脚本自动打开ISE中的最后一个opend文件, 所以我试着保存这些文件的文件路径,如下所示。
$action = {
$psISE.CurrentPowerShellTab.Files | select -ExpandProperty FullPath | ? { Test-Path $_ } |
Set-Content -Encoding String -Path$PSHOME\psISElastOpenedFiles.txt
Set-Content -Encoding String -Value "Now exiting..." -Path c:\exitingtest.log
}
Register-EngineEvent -SourceIdentifier Exit -SupportEvent -Action $action
当我关闭ISE时,会创建exitingtest.log并且“正在退出...”, 但是没有创建psISElastOpenedFiles.txt。 似乎ISE在执行退出事件之前关闭所有打开的文件。
我应该使用Timer事件吗?
答案 0 :(得分:3)
当CurrentTabs和Files对象引发CollectionChanged事件时,不保存退出,而是保存MRU信息。这是我正在使用的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 :(得分:1)
-Oisin