powershell模块快速打开你的开始菜单程序


比如打开QQ, 我只要执行run qq,
打开网易有道词典, run Youdao, run 有道, 或者run Youdao*, 通配符可以加也可以不加
传入的程序名称参数, 是软件安装目录所对应的文件名, 或者快捷方式名称
如果匹配到好几个程序, 会弹出一个图形化的选择框, 按方向键选择, 再按enter就能打开.
当然还能同时打开多个程序,
使用run qq, yodao 同时打开qq和有道, 注意qq和youdao之间有逗号, 这是数组的语法

演示

run.psm1

function run () {
    param
    (
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
    	[string[]]$name
    )
    function exec ([string]$name) {
        $WshShell = New-Object -ComObject WScript.Shell
        $UserLnkFolder = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs"
        $MachineLnkFolder = "$env:ProgramData\Microsoft\Windows\Start Menu\Programs"
        $lnkList1 = Get-ChildItem -Path $UserLnkFolder -Filter *.lnk -Recurse
        $lnkList2 = Get-ChildItem -Path $MachineLnkFolder -Filter *.lnk -Recurse
        $lnkList = $lnkList1 + $lnkList2
        $programPathList = @()
        $programNameList = @()
        foreach ($lnk in $lnkList) {
            $LnkFilePath = $Lnk.FullName
            $LnkShortcut = $WshShell.CreateShortcut($LnkFilePath)
            $LnkTargetPath = $LnkShortcut.TargetPath
            if (!([String]::IsNullOrEmpty($LnkTargetPath))) {
                if (Test-Path -Path $LnkTargetPath) {
                    $CurrentProgramList = @()
                    $CurrentProgramList += Get-Item $LnkTargetPath
                    $CurrentProgramList += Get-Item $LnkFilePath
                    if (!($name.Contains('*'))) {
                        $name = "*$name*"
                    }
                    foreach ($program in $CurrentProgramList) {
                        if ($program.name -like $name -and $program -notin $programNameList) {
                            $programPathList += $LnkTargetPath
                            $programNameList += $program.name
                        }
                    }
                }
            }
        }
        
        $programPathList = $programPathList | Sort-Object -Unique
        if ($programPathList -ne $null) {
            if ($programPathList -isnot [array]) {
                Invoke-Item $programPathList
            }
            else {
                $selectedFile = @($programPathList | Out-GridView -Title 'Choose a program' -PassThru)
                if ($selectedFile -ne $null) {
                    Invoke-Item $selectedFile
                }
            }
        }
        else {
            Write-Output "The $name program dones't exist."
        }
    }
    
    if ($name -isnot [array]) {
        exec $name
    }
    else {
        foreach ($i in $name) {
            exec $i
        }
    }
}
本文链接: https://www.pstips.net/start-program.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注