如何在PowerShell中获取打开的Excel工作簿列表

如何在PowerShell中获取打开的Excel工作簿列表,excel,powershell,Excel,Powershell,当我使用PowerShell时,我只得到几个窗口标题(Workbook1、Workbook2、Workbook3)中的一个(Workbook3),但我想得到所有打开的Excel书籍的完整列表。我正在尝试使用以下代码: [array]$Titles = Get-Process | Where-Object {$_.mainWindowTItle} |Foreach-Object {$_.mainwindowtitle} ForEach ($item in $Titles){Write-Host

当我使用PowerShell时,我只得到几个窗口标题(Workbook1、Workbook2、Workbook3)中的一个(Workbook3),但我想得到所有打开的Excel书籍的完整列表。我正在尝试使用以下代码:

[array]$Titles = Get-Process | Where-Object {$_.mainWindowTItle} |Foreach-Object {$_.mainwindowtitle}

ForEach ($item in $Titles){Write-Host $item}

UPD。(我们有一个书单,但我们看不到哪一本书只能读) 如果我以只读模式打开书本,它将在程序的输出中不可见。在任务管理器中,此标记位于窗口的名称中

$excel = [Runtime.Interopservices.Marshal]::
          GetActiveObject('Excel.Application')

ForEach ( $wkb in $excel.workbooks ) {
  $wkb.Name
}

这似乎起到了作用:

Clear-Host

$excel = [Runtime.Interopservices.Marshal]::
          GetActiveObject('Excel.Application')

ForEach ( $wkb in $excel.workbooks ) {
  $wkb.Name
}
样本输出:

PERSONAL.xlsm
Cash Count.xls
Check Calc.xls
Coke Price Comparison Sheet.xls
PS>
那么,我的解决方案是:

Clear-Host
Remove-Variable * -ErrorAction SilentlyContinue
$excel = [Runtime.Interopservices.Marshal]::GetActiveObject('Excel.Application')
$date = Get-Date -Format "d.MM.y HH:mm"
$person = $env:UserName

#arrays with books and status
ForEach ( $book in $excel.workbooks ) {$books_names = ,$book.Name + $books_names}
ForEach ( $book in $excel.workbooks ) {$books_reads = ,$book.ReadOnly + $books_reads}

#print
#ForEach ($item in $books_names){$item}
#ForEach ($item in $books_reads){$item}

#delete empty string
$books_names = $books_names[0..($books_names.Count-2)]
$books_reads = $books_reads[0..($books_reads.Count-2)]

#replace
$books_reads = $books_reads -replace "False" , "write."
$books_reads = $books_reads -replace "True" , "read"

# Table view
$t = $books_names |%{$i=0}{[PSCustomObject]@{person= $person; date= $date;book=$_; status=$books_reads[$i]};$i++}
#$t | ft
#$t | Out-GridView

# write to txt
Add-Content "C:\My\1.txt" $t | ft

#pause
1.txt看起来像:

@{person=BelyaevKN; date=14.06.21 14:05; book=workbook1; status=write}
@{person=BelyaevKN; date=14.06.21 14:05; book=workbook2; status=read}

真奇怪。似乎Microsoft只显示了一个正在运行的实例:。现在我也很好奇,因为win32_进程类给了我同样的结果。也许加载com对象,然后检查是(不是最好的,但是唯一的)解决方案。但是,如果我以只读模式打开该书,它将在程序的输出中不可见。在任务管理器中,此标记位于窗口的名称中