PowerShell WindowStyle -Hidden在Windows 10上运行,但不在Windows 7上运行

时间:2017-02-16 05:44:00

标签: windows powershell powershell-v2.0 powershell-v5.0

我正在创建一个使用Start-Process cmdlet的应用程序。

使用-WindowStyle隐藏的Start-Process(或Minimized等)对此特定应用程序链接,Windows 7上的Docker QuickStart终端没有影响。我使用的是Docker Toolbox而不是Docker for Windows。

Start-Process -WindowStyle Hidden -FilePath "$env:appdata\Microsoft\Windows\Start Menu\Programs\Docker\Docker Quickstart Terminal.lnk"

它启动应用程序没有问题,但它不会隐藏应用程序,这与Windows 10不同。我很困惑,因为正常的快捷方式链接(Chrome和Internet Explorer)和其他应用程序在两个平台上正确启动和隐藏/最小化。唯一的问题是这个特殊的快捷方式链接。

我不确定这是与PowerShell版本相关的问题,Windows 7上的2.0和Windows 10上的5.0。

有没有人遇到过类似的问题?任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

Docker快捷方式启动bash.exe,启动另一个启动另一个bash.exe的bash.exe Bash内置在Windows 10中,但在以前版本的Windows中没有,所以我想这就是原因。

让我们解析快捷方式文件并手动启动其目标:

function runProgramShortcutHidden($relativePath) {
    $programsMenu = [Environment]::GetFolderPath([Environment+SpecialFolder]::Programs)
    $fullPath = Join-Path $programsMenu $relativePath

    $linkDir = (New-Object -com Shell.Application).NameSpace((Split-Path $fullPath))
    $link = $linkDir.ParseName((Split-Path -leaf $fullPath)).GetLink

    $psi = New-Object Diagnostics.ProcessStartInfo
    $psi.FileName = $link.Path
    $psi.Arguments = $link.Arguments
    $psi.WorkingDirectory = $link.WorkingDirectory
    $psi.WindowStyle = [Diagnostics.ProcessWindowStyle]::Hidden

    [Diagnostics.Process]::Start($psi) >$null
}

用法:

runProgramShortcutHidden 'Docker\Docker Quickstart Terminal.lnk'

注意:

  • 支持快捷方式目标路径中的Unicode,因为代码使用ShellLink接口;
  • System.Diagnostics.Process类用于按原样传递参数字符串。