Конвертировать xlsx в txt powershell

Есть скрипт который конвертирует файлы excel в txt формат, но при условии выбора папки во время его выполнения

  $object = New-Object -comObject Shell.Application  
$folder = $object.BrowseForFolder(0, 'Select the folder', 0)    

if (!$folder) {exit} 

$excel = New-Object -comObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false

foreach ($file in Get-ChildItem -literalPath $folder.self.Path*.xls? -recurse) {
    $workbook = $excel.Workbooks.Open($file.Fullname)    
    foreach ($worksheet in $workbook.Sheets) {                    
        $worksheet.activate()          
        $newpath = $File.DirectoryName +"\"+ $file.BaseName + ".txt"
        $workbook.SaveAs($newpath,-4158 ,$null,$null)
    }
    $workbook.Close()
}
$excel.quit()    

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect() 
[System.GC]::WaitForPendingFinalizers() 

как можно сделать это по-умолчанию без выбора папки, а указав путь к файлу и путь к сохранению, к примеру

$distPath = "C:\Program Files\dotnet"

Ответы (1 шт):

Автор решения: Алексей Семенов
param(
    [System.IO.DirectoryInfo]$folder = "d:\temp"
)
<#
    $object = New-Object -comObject Shell.Application  
    $folder = $object.BrowseForFolder(0, 'Select the folder', 0)    
#>

if (!$folder) {exit} 

$excel = New-Object -comObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false

foreach ($file in Get-ChildItem -literalPath $folder.self.Path*.xls? -recurse) {
    $workbook = $excel.Workbooks.Open($file.Fullname)    
    foreach ($worksheet in $workbook.Sheets) {                    
        $worksheet.activate()          
        $newpath = $File.DirectoryName +"\"+ $file.BaseName + ".txt"
        $workbook.SaveAs($newpath,-4158 ,$null,$null)
    }
    $workbook.Close()
}
$excel.quit()    

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)
[System.GC]::Collect() 
[System.GC]::WaitForPendingFinalizers() 
→ Ссылка