比如打开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
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!
