Powershell - 使用带有隐藏窗口的开关命令启动Outlook 2016

问题描述:

我正在研究供SCCM中的最终用户使用的自动机脚本。除了使用隐藏窗口中的/ cleanviews开关启动Outlook的部分之外,所有内容都以我想要的方式工作。Powershell - 使用带有隐藏窗口的开关命令启动Outlook 2016

当前脚本部分

$path = "C:\Program Files (x86)\Microsoft Office\root\Office16" 

$path2 = "C:\Program Files\Microsoft Office\root\Office16" 

Test-path $path 
if($True){ 

Start-Process -workingdirectory $path OUTLOOK.EXE /cleanviews -WindowStyle Hidden -ErrorAction Ignore} 

Else { 
Start-Process -workingdirectory $path2 OUTLOOK.EXE /cleanviews -WindowStyle Hidden -ErrorAction Ignore} 

Start-Sleep -s 15 

get-process OUTLOOK -ErrorAction ignore | stop-process 

Start-Sleep -s 5 

我也试着除去木材加工目录部分,和从端部移动到-windowstyle启动过程后直接。到目前为止应用程序正常启动在一个正常的窗口

该部分之后还有另一个脚本部分,我不希望我们的用户在cleanviews开关期间看到第二个窗口的原因是因为他们可以很容易地与它发生冲突再次关闭或中断脚本。

意见建议?

刚开始时,

Test-path $path 
if($True){} 

位是没有意义的,将永远返回true,我假定这是投入测试?

其次,有些应用程序会忽略-WindowStyle部分,但是,您可以这样做:

Start-Process -FilePath "C:\Program Files\Microsoft Office\root\Office16\OUTLOOK.EXE" 

$Win32ShowWindowAsync = Add-Type –memberDefinition @” 
    [DllImport("user32.dll")] 
    public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); 
“@ -name “Win32ShowWindowAsync” -namespace Win32Functions –PassThru 

$Show = 1 ; $Hide = 0 ; $TimeOut = 0 
do{ 
    Get-Process 'outlook' | % { 
     $Hidden = $Win32ShowWindowAsync::ShowWindowAsync($_.MainWindowHandle,$Hide) 
    } 
    Start-Sleep -Milliseconds 100 
    $TimeOut++ 
} while (!$Hidden -or $TimeOut -gt 100) 

这是非常难看,但PowerShell不会有所隐瞒现有的工艺窗口的本机方式。