我正在制作一个自动机脚本,供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从结尾移动。到目前为止,应用程序正在正常窗口中启动
在此部分之后还有另一个脚本部分以及我不希望我们的用户在cleanviews开关期间看到第二个窗口的原因是因为他们可能很容易因为它再次关闭而中断并中断脚本。
建议?
答案 0 :(得分: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没有隐藏现有流程窗口的本机方式。