PowerShell 计划任务未将 CSV 转换为 EXCEL

PowerShell scheduled task not converting CSV to EXCEL

提问人:Kenny 提问时间:4/23/2016 更新时间:4/24/2016 访问量:996

问:

我有一个服务器运行状况检查脚本,我正在尝试通过计划任务来工作。

计划任务为“AddArguments”设置了以下内容

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

完整脚本的服务器运行状况部分中的所有内容都可以正常创建 .csv 报告,除了最后一部分,它执行 CSV 到 excel 转换/保存/关闭 - 我没有包含前面的代码,因为它包含一些机密内容,我认为它不相关。

当我使用相同的 ID 运行脚本时,但从 GUI(不是作为计划任务)运行脚本时,它工作正常。

注意:脚本的最后一部分肯定会短暂启动 excel 并执行功能,并保存/关闭它 - 我认为计划任务没有这样做,因为它不受 Microsoft 支持?

我确实找到了以下 SpiceWorks 帖子,但在这种情况下,注意到的解决方案并没有为我解决问题。这是您在这些路径下创建 DESKTOP 文件夹的位置,具体取决于您的 Office 版本(我在 Windows 7 x64 Pro 上使用 Office 2010 32 位)

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()
PowerShell 自动化 excel-2010 计划任务 windows-7-x64

评论

0赞 Kai Zhao 4/23/2016
听起来不像是编码问题。您可以在 CMD 中使用相同的参数运行 powershell.exe 吗?你会遇到同样的问题吗?如果是,请共享错误,如果不是,请共享您的计划任务配置。
0赞 Kenny 4/23/2016
这肯定很奇怪,从 CMD 行工作正常,只是不能通过计划任务。计划任务也配置为使用同一帐户运行。计划任务上的添加参数如下所示: -NoLogo -ExecutionPolicy Bypass -File “C:\HealthCheck.ps1

答:

0赞 Aman Sharma 4/23/2016 #1

编写命令以使用批处理文件中的参数调用 PowerShell。我相信从评论中,您已经能够成功地做到这一点。配置任务计划程序以执行批处理文件。

这样做的另一个好处是,您减少了依赖性。如果以后要修改命令或更改参数,则无需更改甚至打开任务计划程序即可执行此操作。

更新:@Kenny报告说,以最高权限运行任务计划程序的任务解决了此问题。该脚本需要提升的访问权限,并且通过选中任务计划程序中的复选框以以最高权限运行任务来提供相同的访问权限。

评论

1赞 Kenny 4/23/2016
好吧,今天试了一下,但也没有用。我敢肯定,这必须与Office要求打开/关闭GUI的事实有关,这可能是从计划任务运行的限制,该任务通常不会在屏幕上显示任何内容。
0赞 Aman Sharma 4/23/2016
@Kenny 在这种情况下,这绝对是你的问题。您尝试安排的任务应该能够以非交互方式和完全自动化的方式执行它。你应该先尝试解决这个问题。
0赞 Kenny 4/24/2016
更新:已修复。我必须将计划任务设置为“以最高权限运行”,这与创建这两个文件夹一起解决了这个问题。C:\windows\system32\config\systemprofile C:\windows\syswow64\config\systemprofile
0赞 Aman Sharma 4/24/2016
感谢您的更新@Kenny。我很欣赏这一点。我已经用你的更新更新了我的答案。如果你看到价值并想要,你可以投票并标记它作为其他任何来回答这个问题的人的答案,通过点击向上箭头和我的回答旁边的勾号。