Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 测试Outlook是在后台运行还是可见_Powershell_Outlook - Fatal编程技术网

Powershell 测试Outlook是在后台运行还是可见

Powershell 测试Outlook是在后台运行还是可见,powershell,outlook,Powershell,Outlook,我发现了很多很好的脚本,可以在程序不运行时打开它,但事实证明Outlook很棘手。在Windows 10(build 170121)中,它在登录时打开并在后台运行,因此Get进程将始终至少找到一个实例,无论应用程序是否从用户角度打开(打开第二个进程)。我未受过教育的猜测是,它总是存在,因为我在Win 10设置中将Outlook设置为默认邮件程序 我可以看到后台进程的独特属性,比如PID较低,用户对象的数量=1,但是必须有一种方法来确定UI是否打开(我称之为第二个进程,并希望进行测试) 这是一个脚

我发现了很多很好的脚本,可以在程序不运行时打开它,但事实证明Outlook很棘手。在Windows 10(build 170121)中,它在登录时打开并在后台运行,因此Get进程将始终至少找到一个实例,无论应用程序是否从用户角度打开(打开第二个进程)。我未受过教育的猜测是,它总是存在,因为我在Win 10设置中将Outlook设置为默认邮件程序

我可以看到后台进程的独特属性,比如PID较低,用户对象的数量=1,但是必须有一种方法来确定UI是否打开(我称之为第二个进程,并希望进行测试)

这是一个脚本,适用于不总是在后台运行的程序。有没有人能帮我找到一个UI过程的最终测试?非常感谢

if((Get-Process -Name OUTLOOK -ErrorAction SilentlyContinue) -eq $null){
    ."C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE"
}

听起来,您的get流程部分已经完成了一半。如果进程没有运行,您可以启动一个新进程

从这里开始,您只需最大化并设置前景窗口,本主题可能会对此有所帮助


也许这段代码有助于:

Add-Type -AssemblyName Microsoft.Office.Interop.Outlook
$Outlook = New-Object -ComObject Outlook.Application
if($Outlook.ActiveWindow()) { "visible" } else { "hidden" }
它在这里起作用,但Outlook没有在我的W10系统的后台运行

编辑:

try {
    [Runtime.Interopservices.Marshal]::GetActiveObject('Outlook.Application').ActiveWindow() | Out-Null
    "visible"
} catch {
    "hidden"
}

系统中只能同时运行一个Outlook实例。Outlook是一个单独的组件

最简单的解决方案是尝试使用该方法获取Outlook应用程序实例,有关示例代码,请参阅。然后,您可以检查应用程序类的方法,该方法返回一个表示桌面上当前Microsoft Outlook窗口的对象,即资源管理器或检查器对象

但是,如果应用程序和Office主机在不同的安全上下文下运行,有时您将无法连接到Outlook实例。您需要以相同的安全级别运行两个应用程序(例如,以管理员身份运行)


最后一种方法是使用函数来检索顶级窗口的句柄,该窗口的类名和窗口名与指定的字符串匹配

我想OP想测试Outlook窗口是否打开,该过程始终处于活动状态。感谢您提供的示例,并感谢Eugene(非常感谢!!!)提醒我Outlook不应该像我的笔记本电脑那样运行。在我的电脑上,Outlook没有在后台运行,当我尝试启动第二个实例时,它确实会抛出一个错误,一次只能运行一个实例。我的笔记本电脑正在做一些不可能的事情,我上班的时候会用它。PC和笔记本电脑在域和Office 2016 x64(来自Office 365 E3订阅的C2R)的同一版本上运行相同的Win 10 Ent x64 15019内部版本。我刚刚测试了这一点:如果Outlook(至少2016 x64版本)以管理员身份运行,它将不允许两个实例并弹出消息框。如果运行“正常”,则允许n个实例。