1

У меня есть скрипт проверки работоспособности сервера, который я пытаюсь выполнить по запланированной задаче.Запланированное задание PowerShell не конвертировать CSV в EXCEL

Запланированная задача имеет следующий набор для «AddArguments»

Add Arguments: -NoLogo -ExecutionPolicy Bypass -File "C:\HealthCheck.ps1" 

Все в части здоровья сервера полного сценария прекрасно работает, чтобы создать отчет в формате CSV, за исключением последней части, который делает CSV для excel conversion/save/close - я не включил предыдущий код, так как он содержит некоторые конфиденциальные данные, и я не думаю, что это релевантно.

Когда я запускаю скрипт с тем же идентификатором, но из GUI (а не как запланированная задача), он отлично работает.

Примечание. Последняя часть скрипта определенно запускает excel в кратчайшие сроки и выполняет функции и сохраняет/закрывает его - я думаю, что запланированная задача не делает этого, потому что она не поддерживается Microsoft?

Я нашел следующее SpiceWorks post, но указанное решение не разрешило проблему для меня в этом случае. Вот где вы создаете папку РАБОЧЕЙ под этими путями в зависимости от версии офиса (я использую Office 2010 32-бит на Windows 7 x64 Pro)

C:\windows\system32\config\systemprofile 
C:\windows\syswow64\config\systemprofile 

Во всяком случае, вот код - Любая помощь приветствуется!

#Convert CSV to EXCEL, format, and save 
#Create excel object 
$xl = new-object -comobject excel.application 
$xl.visible = $true 

#Input 
$Workbook = $xl.workbooks.open(“$Dir\Reports\SeverHealth-Results- $CurrentDate.csv”) 
$worksheet = $workbook.worksheets.Item(1) 
$xl.Rows.Item("2:2").Select() 
$xl.ActiveWindow.FreezePanes = $true 
$HeaderRow = $Worksheet.Range("A1:L1") 
$HeaderRow.Font.Bold = $True 
$HeaderRow.Font.Underline = $True 

$range = $worksheet.UsedRange 
$range.AutoFilter() | Out-Null 
$range.EntireColumn.AutoFit() | Out-Null 
$rowc = $WorkSheet.UsedRange.Rows.Count 
$colc = $WorkSheet.UsedRange.Columns.Count 

#Coloring 
for ($z = 1; $z -le $rowc; $z++) { 
$ActionReqCol = $worksheet.cells.item($z,7) 
$ServerCol= $worksheet.cells.item($z,1) 
if ($ActionReqCol.text -eq "YES") { 
    $ActionReqCol.interior.colorindex=3 
    $ACtionReqCol.font.colorindex=2 
$ServerCol.interior.colorindex=3 
$ServerCol.font.colorindex=2}} 

#Save and close! 
$EndDate = Get-Date 
$EndDate = $EndDate.ToString('MM-dd-yyyy_hhmm') 
$Worksheets = $Workbooks.worksheets 
$xlFixedFormat = [Microsoft.Office.Interop.Excel.XlFileFormat]::xlWorkbookDefault 
$Workbook.SaveAs($Dir + "\Reports\SeverHealth-Results-$EndDate.xls”,  $XLFixedFormat) 
$Workbook.Saved = $True 
$xl.Quit() 
+0

Не звучит как проблема с кодированием. Можете ли вы запустить powershell.exe с теми же аргументами в CMD? у вас была бы такая же проблема? Если да, пожалуйста, поделитесь этой ошибкой, если нет, поделитесь своей запланированной конфигурацией задач. –

+0

Странно, отлично работает на линии CMD, а не через запланированную задачу. Запланированная задача настроена так же, как и с той же учетной записью. Параметр Add Arguments для запланированной задачи выглядит следующим образом: -NoLogo -ExecutionPolicy Bypass -File "C: \ HealthCheck.ps1 – Kenny

ответ

0

Напишите команду для вызова PowerShell с аргументами в пакетном файле. Я считаю, что из комментариев вы уже можете сделать это успешно. Настройте планировщик заданий для выполнения командного файла.

Другим преимуществом этого является уменьшение зависимости. Если позже вы захотите внести изменения в свою команду или изменить аргументы, вы сможете сделать это без изменения или даже открытия Планировщика заданий.

Обновление: @ Kenny сообщила, что задача выполнения планировщика задач с наивысшей привилегией разрешила это. Сценарий требовал повышенного доступа, и тот же был предоставлен, установив флажок в Планировщике задач для выполнения задачи с наивысшими привилегиями.

+1

Хорошо. Пробовал это сегодня, но это тоже не сработало. Я уверен, что это должно быть связано с тот факт, что Office требует, чтобы GUI был открыт/закрыт, это может быть ограничение работы от запланированной задачи, которая обычно не отображает ничего на экране. – Kenny

+0

@Kenny В этом случае это определенно ваша проблема. задача, которую вы пытаетесь запланировать, должна быть способна выполнить ее неинтерактивно и полностью автоматизированно. Сначала вы должны решить эту проблему. –

+0

Обновление: исправлено. Мне пришлось установить запланированную задачу «работать с наивысшими привилегиями», , который вместе с созданием этих двух папок разрешил проблему. C: \ windows \ system32 \ config \ systemprofile C: \ windows \ sysw ow64 \ config \ systemprofile – Kenny

Смежные вопросы