2009-11-12 8 views
3

Je voulais ouvrir automatiquement les derniers fichiers opend dans ISE avec le script posh, alors j'ai essayé d'enregistrer les chemins de fichiers de ces fichiers comme suit.comment ouvrir les derniers fichiers ouverts dans ISE au démarrage

$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

lorsque je ferme ISE, exitingtest.log est créé et a "Maintenant sortir ...", mais psISElastOpenedFiles.txt n'est pas créé. il semble que ISE ferme tous les fichiers d'ouverture avant que l'événement sortant est exécuté.

Devrais-je utiliser l'événement Timer?

Répondre

1

J'ai essayé de le faire il y a quelques mois et j'ai découvert qu'une condition de course empêchait cela de fonctionner 95% du temps. La collection d'onglets dans le modèle objet d'ISE est généralement éliminée avant que l'événement powershell.exiting ne soit géré. Dumb, oui. Fixable, non.

-Oisin

2

Plutôt que d'économiser sur la sortie, enregistrer les informations MRU lorsque les CurrentTabs et les objets Fichiers Déclenchez l'événement CollectionChanged. Ceci est l'addon ISU MRU que j'utilise:

# 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 
Questions connexes