如何监控 Microsoft Outlook 以确定加载时间和使用第三方程序、PowerShell 或 C# 所涉及的因素?

Posted

技术标签:

【中文标题】如何监控 Microsoft Outlook 以确定加载时间和使用第三方程序、PowerShell 或 C# 所涉及的因素?【英文标题】:How do I monitor Microsoft Outlook to determine load time and factors involved using a third party program, PowerShell, or C#? 【发布时间】:2021-11-30 07:35:54 【问题描述】:

我的任务是查找或创建一个第三方应用程序,该应用程序将用于自动化监控打开 Microsoft Outlook 所需的时间并记录打开时执行的所有操作,例如插件、.ost或 .pst 文件大小、打开/共享共享邮箱。我在网上搜索了可以执行此操作的第三方应用程序或 PowerShell 程序。我什至搜索了有关如何开发 PowerShell 脚本甚至开始用 C# 编写可以做到这一点的程序的起点。我正在使用 Microsoft Outlook 2016。我目前处于 C# 编程的中级水平,并且正在学习更多信息来完成这个项目。我有以下问题:

    有谁知道可以实现此目标的第 3 方或 PowerShell 脚本?

    或者,我什至如何开始一个 C# 脚本来完成这个?

感谢您的所有帮助。

【问题讨论】:

或许可以看看:docs.microsoft.com/en-us/windows/apps/trace-processing/overview 【参考方案1】:

我不能完全回答你的问题,但我可能对如何监控 Outlook 的启动速度有一些见解。使用 powershell 或 C#,您可以启动 Outlook 并测量完全启动所需的时间。也许可以使用 Outlook COM 接口收集更多信息,但这样您至少可以看到时间。

显示启动速度的简单测试脚本(Powershell):

Add-Type -assembly "Microsoft.Office.Interop.Outlook"

$sw = [Diagnostics.Stopwatch]::StartNew()

$Outlook = New-Object -comobject Outlook.Application
$namespace = $Outlook.GetNameSpace("MAPI")
$folder = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
$explorer = $folder.GetExplorer()
$explorer.Display()

$sw.Stop()
$sw.Elapsed

【讨论】:

谢谢。我会看看这个。 关于如何使用用户的域凭据或登录用户打开它的任何想法?我记得我在寻找这个答案时找到了这个脚本,这就是我当时遇到的问题,现在仍然有。它为新用户设置启动 Outlook。我需要检查登录用户在登录域后加载 Outlook 是否出现问题。 这是个好问题。在致电支持之前知道哪个用户遇到了 Outlook(一般办公室)问题会很高兴。如果我发现任何有用的东西,我会调查并更新我的答案。如果您通过回答自己的问题找到好的答案,请告诉我 在下面查看我的答案。 所提供的答案可以很好地启动 Outlook 并测试速度,但如果不是以当前用户身份启动则不准确,因为未加载加载项和所有共享邮箱。也许看看用我提供的答案来修改它。【参考方案2】:

因此,在让经验丰富的程序员查看我的脚本后,他进行了一些必要的更改和 cmets。

clear-host
$CSVFile = Read-Host "Enter CSV log file and path - (C:\temp\outlook.csv)"
$ProcMonTest = Read-Host "Enter app path - (C:\Program Files\Microsoft Office\Office16\OUTLOOK.EXE)"
$ProcMon = "C:\tools\Procmon.exe" # this would be the path to wherever procmon.exe is
$ProcMonBack = "C:\Temp\ProcMonTest.pml"
$LaunchBAT = Read-Host "Enter path to the BAT file to launch the app to be tested - (c:\tools\StartOutlook.bat)" # use a bat file to get past PowerShell security
$CredsForApp = $host.ui.PromptForCredential("Run App As?", "Enter creds in domain\username format to run testing app:", "", "") # this gives us the creds to run the app to be tested as 
 
# make sure backing file isn't present in case it wasn't deleted on last run
$FileExists = Test-Path $ProcMonBack
if ($FileExists -eq $true)
Remove-Item $ProcMonBack -force

 
& $ProcMon /Quiet /AcceptEula /Minimized /backingfile $ProcMonBack 
 
do
Start-Sleep -seconds 90 # procmon.exe /waitforidle doesn't appear to work well when scripted with PowerShell
$ProcMonProcess = Get-Process | where $_.Path -eq $ProcMon
while(
$ProcMonProcess.Id -eq $null
)
(Start-Process cmd -Credential $CredsForApp -Argument "/c $LaunchBAT")

Start-Sleep -seconds 90 # adjust this time based on how long the test run is needed
 
$ProcMonTestProcess = Get-Process | where $_.Path -eq $ProcMonTest
Stop-Process $ProcMonTestProcess.Id -Force
 
& $ProcMon /Terminate
 
Start-Sleep -seconds 60 # procmon.exe can take a long time to exit, this ensures it does before proceeding
 
# Read the procmon.exe backing file and export as CSV
& $ProcMon /openlog $ProcMonBack /SaveAs $CSVFile
& $ProcMon /Terminate

Start-Sleep -seconds 60 # procmon.exe can take a long time to exit, this ensures it does before proceeding

# Clean up procmon.exe backing file
$FileExists = Test-Path $ProcMonBack
if ($FileExists -eq $true)
Remove-Item $ProcMonBack -force

【讨论】:

以上是关于如何监控 Microsoft Outlook 以确定加载时间和使用第三方程序、PowerShell 或 C# 所涉及的因素?的主要内容,如果未能解决你的问题,请参考以下文章

outlook2007如何从一个用户迁移到另一个用户

Microsoft Outlook 教程,如何在 Outlook 中创建、发送、答复和转发电子邮件?

如何使用microsoft office outlook 2010如何更改imap邮件的存储位置

如何使用自定义协议从 Android 浏览器打开 Microsoft Outlook 应用程序?

Microsoft Office Outlook 2003中如何设置foxmail.com

配置outlook007时提示“与Microsoft Exchange Server的连接不可用,Outlook必须联机或连接才可完成操作