У меня есть сценарий PowerShell для преобразования файла .xls в файл .txt. Он отлично работает в PowerShell и как запланированная задача, когда «запускать только когда пользователь вошел в систему» отмечен как моя учетная запись пользователя, но если я пробую систему и запускаю, вошел в систему или нет, она не будет работать.
Я пробовал разные аргументы и уже установил некоторые флаги безопасности для учетной записи.
Некоторые отладки показывают это при запуске от имени системного пользователя:
Microsoft Excel не может получить доступ к файлу 'C: \ test \ test.xls'. Есть несколько возможных причин: • Имя файла или путь не существует. • Файл используется другой программой. • Книга, которую вы пытаетесь сохранить, имеет то же имя, что и текущая открытая книга.
В C: \ test \ t.ps1: 5 char: 1 + $ WorkBook = $ Excel.Workbooks. Открыть ($ file.Fullname) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: OperationStopped: (:) [], COMException + FullyQualifiedErrorId: System.Runtime.InteropServices.COMException
Нельзя вызывать метод для выражения с нулевым значением. В C: \ test \ t.ps1: 6 char: 1 + $ Workbook.SaveAs ('c: \ test \ t.txt', 42) # xlUnicodeText + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId: InvokeMethodOnNull
#excel processing
$Excel = New-Object -ComObject Excel.Application
$Excel.visible = $false
$Excel.DisplayAlerts = $false
$file = Get-ChildItem 'c:\test\test.xls'
$WorkBook = $Excel.Workbooks.Open($file.Fullname)
$Workbook.SaveAs('c:\test\t.txt', 42) # xlUnicodeText
# cleanup
$Excel.Quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($WorkBook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Excel) | Out-Null
[System.GC]::Collect()
[System.GC]::WaitForPendingFinalizers()
#powershell -ExecutionPolicy ByPass -File C:\test\t.ps1
Ожидаемый результат создает новый текстовый файл в тестовой папке, фактический результат просто ничего не дает.