Powershell - запуск Outlook 2016 с помощью команд переключения со скрытым окном

Я работаю над сценарием автомата для использования нашими конечными пользователями в SCCM. Все работает так, как я хочу, за исключением раздела запуска Outlook с переключателем /cleanviews в скрытом окне.

Текущий раздел скрипта

$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 directory и переместить -windowstyle с конца сразу после start-process. Пока приложение запускается в обычном окне

После этой части есть еще один раздел сценария, и причина, по которой я не хочу, чтобы наши пользователи видели второе окно во время переключения cleanviews, заключается в том, что они могут легко взбеситься, закрыв его снова и/или прервав сценарий.

предложения?


person Matt    schedule 25.05.2017    source источник


Ответы (1)


просто для начала,

Test-path $path
if($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 не имеет собственного способа скрыть существующее окно процесса.

person colsw    schedule 25.05.2017