【问题标题】:PowerShell scheduled task not converting CSV to EXCELPowerShell 计划任务未将 CSV 转换为 EXCEL
【发布时间】:2016-08-16 19:44:56
【问题描述】:

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

计划任务具有以下“AddArguments”集

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

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

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

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

我确实找到了以下SpiceWorks post,但在这种情况下,所提到的解决方案并没有为我解决问题。根据您的 Office 版本,您可以在这些路径下创建一个 DESKTOP 文件夹(我在 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()

【问题讨论】:

  • 听起来不像是编码问题。您可以在 CMD 中使用相同的参数运行 powershell.exe 吗?你会有同样的问题吗?如果是,请分享错误,如果不是,请分享您的计划任务配置。
  • 这很奇怪,从 CMD 行可以正常工作,只是不能通过计划任务。计划任务也配置为使用相同的帐户运行。计划任务的 Add Arguments 如下: -NoLogo -ExecutionPolicy Bypass -File "C:\HealthCheck.ps1

标签: powershell automation excel-2010 scheduled-tasks windows-7-x64


【解决方案1】:

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

这样做的另一个好处是,您减少了依赖性。如果以后您想修改您的命令或更改参数,那么您将能够在不更改甚至打开任务计划程序的情况下执行此操作。

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

【讨论】:

  • 好的。今天试过了,但也没有用。我确定这与Office需要打开/关闭GUI这一事实有关,这可能是从计划任务运行的限制,通常不会在屏幕上显示任何内容。
  • @Kenny 在这种情况下,这绝对是您的问题。您尝试安排的任务应该能够以非交互方式和完全自动化的方式执行。你应该先尝试解决这个问题。
  • 更新:已修复。我必须将计划任务设置为“以最高权限运行”,这与创建这两个文件夹一起解决了这个问题。 C:\windows\system32\config\systemprofile C:\windows\syswow64\config\systemprofile
  • 感谢@Kenny 的更新。我很欣赏这个。我已经用你的更新更新了我的答案。如果您看到价值并希望您可以投票并将其标记为其他任何人的答案,请点击我的回复旁边的向上箭头和勾选标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
相关资源
最近更新 更多