I am trying to extract the hyperlinks from PPTX's. I can do it with a single named pptx thus:
$array = New-Object System.Collections.ArrayList
Add-Type -AssemblyName Office
$objPPT = New-Object -ComObject powerpoint.Application
$Doc = $objPPT.Presentations.Open("C:empppt2.pptx", $Null,$Null,[Microsoft.Office.Core.MsoTriState]::msoFalse)
$Slides = $pptDoc.Slides
Foreach ($Slide in $Slides) {
$Links = $Slide.Hyperlinks
Foreach ($Link in $Links) {
$array.add([pscustomobject]@{
Text = $Link.TextToDisplay
HyperLink = $Link.Address
}) | out-null
}
}
But when I try to use a collection, it does not work:
$parentFolder = "C:emp"
$array = New-Object System.Collections.ArrayList
Add-Type -AssemblyName Office
$objPPT = New-Object -ComObject powerpoint.Application
$ourPPTs = Get-ChildItem -Recurse -LiteralPath $parentFolder -file -Filter *.ppt*
$ourPPTs | ForEach-Object{
$pptDoc = $objPPT.Presentations.Open($PSItem, $Null,$Null,[Microsoft.Office.Core.MsoTriState]::msoFalse)
$Slides = $pptDoc.Slides
Foreach ($Slide in $Slides) {
"Slide"
"-----"
$Slide
$Links = $Slide.Hyperlinks
Foreach ($Link in $Links) {
"Link"
"----"
$Link
$array.add([pscustomobject]@{
Text = $Link.TextToDisplay
HyperLink = $Link.Address
}) | out-null
}
}
}
I thought $PSItem referenced the current object in the collection. It works with word docs, but not with PPT's.
question from:
https://stackoverflow.com/questions/65928896/powershell-how-can-i-open-each-pptx-in-a-collection 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…