1

我正在开发一个供我们的最终用户在 SCCM 中使用的自动机脚本。一切都按我想要的方式工作,除了在隐藏窗口中使用 /cleanviews 开关启动 Outlook 的部分。

当前脚本部分

$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

我还尝试删除 -working 目录部分,并将 -windowstyle 从末尾移动到直接在 start-process 之后。到目前为止,应用程序正在正常窗口中启动

这部分之后还有另一个脚本部分,我不希望我们的用户在 cleanviews 切换期间看到第二个窗口的原因是因为他们很容易因为它再次关闭或中断脚本而吓坏了。

建议?

4

1 回答 1

0

刚开始,

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

bit 没有任何意义,并且总是会返回 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 没有隐藏现有进程窗口的本机方式。

于 2017-05-25T22:49:13.287 回答