2017-05-25 74 views
1

我正在研究供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開關期間看到第二個窗口的原因是因爲他們可以很容易地與它發生衝突再次關閉或中斷腳本。

意見建議?

回答

0

剛開始時,

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不會有所隱瞞現有的工藝窗口的本機方式。

相關問題