Powershell | COM对象Excel | 打开前景?

只有在没有configuration邮件帐户时才会出现问题 – 仍然可以获得解决scheme

我需要一些帮助。 我已经发现了这个小脚本的一个非常奇怪的习惯。 我完全不知道为什么会发生这种情况。 如果我运行下面的代码, Microsoft Outlook启动。 只要我不终止 Outlook进程脚本被卡住了! 为什么这个代码会启动Outlook? 我搞不清楚了!

$Path = "C:\test.xls" #Excelvar: $Row = [int] 2 $Excel = New-Object -ComObject Excel.Application $Excel.Visible = $true $Excel.DisplayAlerts = $false #Sheets: $ADUsers = "Active Directory Users" $Groups = "Create Groups" $UsertoGroup = "User to groups" $DNS = "DNS" #$Worksheet = $Workbook.Sheets.Add() $checkxls = test-path -pathtype Any $Path if ($checkxls -eq $false) { $wb = $Excel.Workbooks.Add() $wb.Worksheets.add() $wb.SaveAs($Path) $wb.Close() $Excel.Quit() 

Thx提前!

Outlook终止后的Powershell输出:

 Application : Microsoft.Office.Interop.Excel.ApplicationClass Creator : 1480803660 Parent : System.__ComObject CodeName : _CodeName : Index : 1 Name : Tabelle4 Next : System.__ComObject OnDoubleClick : OnSheetActivate : OnSheetDeactivate : PageSetup : System.__ComObject Previous : ProtectContents : False ProtectDrawingObjects : False ProtectionMode : False ProtectScenarios : False Visible : -1 Shapes : System.__ComObject TransitionExpEval : False AutoFilterMode : False EnableCalculation : True Cells : System.__ComObject CircularReference : Columns : System.__ComObject ConsolidationFunction : -4157 ConsolidationOptions : {False, False, False} ConsolidationSources : DisplayAutomaticPageBreaks : False EnableAutoFilter : False EnableSelection : 0 EnableOutlining : False EnablePivotTable : False FilterMode : False Names : System.__ComObject OnCalculate : OnData : OnEntry : Outline : System.__ComObject Rows : System.__ComObject ScrollArea : StandardHeight : 15 StandardWidth : 10,71 TransitionFormEntry : False Type : -4167 UsedRange : System.__ComObject HPageBreaks : System.__ComObject VPageBreaks : System.__ComObject QueryTables : System.__ComObject DisplayPageBreaks : False Comments : System.__ComObject Hyperlinks : System.__ComObject _DisplayRightToLeft : False AutoFilter : DisplayRightToLeft : False Scripts : System.__ComObject Tab : System.__ComObject MailEnvelope : CustomProperties : System.__ComObject SmartTags : System.__ComObject Protection : System.__ComObject ListObjects : System.__ComObject EnableFormatConditionsCalculation : True Sort : System.__ComObject PrintedCommentPages : 0 

这里的问题是,当你运行$wb.Worksheets.add()它将新的工作表返回到pipe道(这就是为什么当你杀死Outlook时显示工作表属性)。

我相信工作表的MailEnvelope属性是什么导致Outlook打开(如果您存储表并返回MailEnvelope属性,发生相同的行为)。

要解决这个问题,可以存储返回的工作表,使用Out-null cmdlet或将工作表$ws = $wb.Worksheets.add()为void: $ws = $wb.Worksheets.add()$wb.Worksheets.add() | Out-Null $wb.Worksheets.add() | Out-Null[void] $wb.Worksheets.add()