Скрипт Powershell запускается из планировщика задач, который не может открыть текстовый документ

Вопрос:

Я пытаюсь использовать сценарий powershell, чтобы получить словосочетание из нескольких текстовых файлов, а затем вывести его в файл csv. Это работает так, как ожидалось, когда запускается из приглашения powershell и работает при вызове из командной строки непосредственно или изнутри скрипта perl, однако скрипт не работает при вызове в качестве запланированной задачи.

Это не проблема с ExecutionPolicy, при которой сценарий не запускается вообще. Скрипт работает и производит некоторый вывод, но при запуске из планировщика задач он не может открыть какие-либо текстовые документы.

Соответствующий код powershell приведен ниже:

$folderpath = "C:\some\where\*"
$fileTypes = "*.docx"

$word = New-Object -ComObject word.application
$word.visible = $false
Get-ChildItem -path $folderpath -recurse -include $fileTypes |
foreach-object '
{
$path =  ($_.fullname).substring(0,($_.FullName).lastindexOf("."))

try {
$doc = $word.documents.open($_.fullname, $confirmConversion, $readOnly, $addToRecent, $passwordDocument)
} catch {
"FROM CATCH UNABLE TO OPEN $($_.fullname)" >> $wordCountFile
}
if($doc) {
$wordCount = $doc.ComputeStatistics("wdStatisticWords")
"$($_.name), $wordCount"  >> $wordCountFile
$doc.close([ref]$false)
} else {
"UNABLE TO OPEN $($_.fullname)" >> $wordCountFile
}

} #end Foreach-Object
$word.Quit()

(Обратите внимание, что альтернативные методы, которые люди цитируют для получения количества слов из текстовых документов, фактически не возвращают правильный счет, как этот метод делает, когда он работает.)

При запуске в качестве запланированной задачи (для запуска с наивысшими привилегиями и как пользователь-администратор) с использованием:

cmd /c start PowerShell.exe -NoLogo -NonInteractive -ExecutionPolicy Bypass -File "C:\path\to\script\CountsInWords.ps1"

или при запуске с подобной командой из скрипта perl, запущенного запланированной задачей (мой обычный вариант использования), и в обоих случаях задача установлена с наивысшими привилегиями, сценарий powershell работает неправильно.

Блок catch, по-видимому, никогда не был достигнут, поскольку оператор печати никогда не делает его в файл, однако $ doc всегда равен нулю.

Кроме того, при запуске в качестве задачи сценарий оставляет открытым процесс word и использует 100% -ный процессор для 1 потока, что в конечном итоге приведет к повреждению моей машины.

Обобщить:

запустить сценарий как человека (независимо от того, сколько уровней косвенности) → отлично работает

запускать скрипт из задачи (как пользователь-администратор) → запускает скрипт, но не может получить доступ к текстовым документам, также не может остановить процесс слов, несмотря на то, что всегда нажимает строку $ word.Quit.

EDIT: с советом @TheMadTechnician о первом запуске офиса для нового пользователя, требующего некоторых подробностей: при дальнейшей проверке, глядя на процессы в диспетчере задач, я не вижу словосочетания, если я не нажму “показать процессы от всех пользователей”,, но потом они появляются, но пользователь указан как я. Как процесс может быть явно указан как я, но считать другого пользователя?

Попытка установить $word.visible = $true в скрипте фактически не $word.visible = $true ничего, появляющегося при запуске из планировщика задач, поэтому я не знаю, как проверить, что он ждет ввода, или как передать его этому вводу как правильный пользователь, чтобы он ушел…

Лучший ответ:

Возможно, вы сможете выполнить решение, указанное на вопрос ” Как запустить задачу Windows 2008 из планировщика с” взаимодействовать с рабочим столом “.

Резюме. Если у вас 64-разрядная версия Windows: создайте %SystemRoot%\SysWOW64\config\systemprofile\Desktop. Если у вас 32-разрядная версия Windows, создайте %SystemRoot%\system32\config\systemprofile\Desktop.

Оцените статью
TechArks.Ru
Добавить комментарий