Powershell | Com-object Excel |打开展望?

时间:2013-10-31 10:01:42

标签: excel powershell com

仅在配置邮件帐户时才会出现问题 - 我仍然会感谢解决方案

我需要一些帮助。我发现这个小脚本有一个非常奇怪的习惯。我完全不知道为什么会发生这种情况。 如果我浏览下面发布的代码, 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()
提前谢谢!

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

2 个答案:

答案 0 :(得分:3)

此处的问题是,当您运行$wb.Worksheets.add()时,它会将新工作表返回到管道(这就是您杀死Outlook时显示工作表属性的原因。)

我相信Worksheet的MailEnvelope属性是导致Outlook打开的原因(如果存储Sheet并返回MailEnvelope属性,则会发生相同的行为)。

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

答案 1 :(得分:0)