PowerShell WindowStyle - 隐藏在 Windows 10 但不是 Windows 7

PowerShell WindowStyle -Hidden working on Windows 10 but not Windows 7

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

Start-Process with -WindowStyle Hidden(或 Minimized 等)对此特定应用程序没有影响 link,Docker Windows 上的 QuickStart Terminal 7. 我我正在使用 Docker 工具箱而不是 Docker 用于 Windows。

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

它可以毫无问题地启动应用程序,但它不会像 Windows 10 那样隐藏应用程序。我很困惑,因为正常的快捷方式 links(Chrome 和 Internet Explorer ) 和其他应用程序在两个平台上正常启动和 hides/minimizes。唯一的问题是这个特定的快捷方式 link.

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

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

Docker 快捷方式启动 bash.exe,启动另一个 bash.exe,启动另一个 bash.exe。
Bash 在 Windows 10 中是 built-in,但在 Windows 的以前版本中不是 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'

备注:

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