答案1
这是个老问题了,但我只是顺便提一下@Windos想出一个适合我的解决方案。由于我使用 ISE-Steroids,因此有一个功能可以保留打开的文件。我不想在启动时关闭所有打开的文件,只想关闭无标题的文件。
foreach($file in $psISE.CurrentPowerShellTab.Files) {
if ($file.DisplayName -like "Untitled*.ps1"){
$deleteMe = $file
}
}
$psISE.CurrentPowerShellTab.Files.Remove($deleteMe)
尝试在 for 循环内删除文件将导致枚举错误。如果在启动时以某种方式打开了多个无标题脚本,$deleteme
则可能是使用数组列表添加多个文件并将其自身添加到foreach
其中以删除所有文件。
答案2
这是一个老问题,但我来这里寻找答案,所以我想我会给出我的实验结果。
有一个$psISE
对象可以控制 ISE 设置、打开的文件等。您可以用它做很多事情。
有一个看起来很有希望的函数:
$psISE.CurrentPowerShellTab.Files.Clear()
不幸的是,这只会关闭所有打开的文件(如果它们已保存),然后打开一个新的未命名文件。
我最终得到了这个:
$null = while ($psISE.CurrentPowerShellTab.Files -ne $null) {
$file = $psISE.CurrentPowerShellTab.Files[0]
$psISE.CurrentPowerShellTab.Files.Remove($file)
}
基本上,它会不断检查打开的文件,并关闭它们,直到没有打开的文件为止。如果您以交互方式运行此程序,并且打开了未保存的文档,那么您很快就会被错误淹没,因为它无法关闭,然后循环再次尝试关闭它。
然后,您可以将其放入 ISE 配置文件 (C:\username\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1)。这是我目前的配置文件:
$null = while ($psISE.CurrentPowerShellTab.Files -ne $null) {
$file = $psISE.CurrentPowerShellTab.Files[0]
$psISE.CurrentPowerShellTab.Files.Remove($file)
}
psEdit $PSScriptRoot\snips.ps1
由于此操作在启动 ISE 时运行,因此它会关闭默认的未命名文件并打开一个随机文件,其中包含我喜欢参考的小片段。您可以省略最后一行或将其更改为您想要打开的任何文件。
nb 这$null =
是为了抑制输出,它比管道传输更快Out-Null
(我认为当你等待编辑器加载时这很重要。)