PowerShell WindowsStyle-隐藏在Windows 10上工作,但不在Windows 7上工作

PowerShell WindowsStyle-隐藏在Windows 10上工作,但不在Windows 7上工作,windows,powershell,powershell-2.0,powershell-5.0,Windows,Powershell,Powershell 2.0,Powershell 5.0,我正在制作一个使用Start Process cmdlet的应用程序 使用-WindowStyle Hidden(或Minimized等)启动进程对Windows 7上的Docker QuickStart终端这一特定应用程序链接没有影响。我正在使用Docker工具箱而不是Docker for Windows Start-Process -WindowStyle Hidden -FilePath "$env:appdata\Microsoft\Windows\Start Menu\Programs

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

使用-WindowStyle Hidden(或Minimized等)启动进程对Windows 7上的Docker QuickStart终端这一特定应用程序链接没有影响。我正在使用Docker工具箱而不是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版本有关


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

Docker快捷方式启动另一个bash.exe并启动另一个bash.exe。
Bash内置于windows10中,但不在以前版本的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接口
  • 类用于按原样传递参数字符串

您好,我忘记了我正在使用Docker工具箱而不是Docker for Windows。我认为Docker工具箱使用的是非内置Git Bash。在我回来接受你的答案之前,我会更多地学习PowerShell(我知道的很少),以了解你刚才写的内容。谢谢。您好,所以它在Windows 10上工作正常,但在Windows 7上不工作,不包含“GetLink”,您好,非常感谢您的响应,我现在无法验证答案,因为用于测试的机器现在不可用。我明天会核实的。还有一个问题,如果我想要run.sh作为ArgumentList的参数,我可以添加这一行吗?好的,我意识到^。我希望能够指定
-ArgumentList run.sh
,因为我需要它来运行shell脚本,然后自己退出。作为带引号的字符串:
$psi.Arguments='param1 param2“param in quotes”
,但请注意,它会替换整个参数字符串,因此您可能希望从$link将其添加到现有的参数字符串中。