|
想要用命令行实现批量pin程序到开始屏幕,搜了下,
第一段代码(cmd)如下:
@echo off
SetLocal EnableDelayedExpansion
set "lnk_list=C:\ProgramData\Microsoft\Windows\Start Menu\Programs\工具\"
for /f %%a in ('dir /b "%lnk_list%"') do (
rem explorer.exe shell:::{41FE75BD-F65B-4797-89D6-8C6E7B3E3F31} && timeout /t 2 /nobreak——这行不注释直接报错
powershell -command "(New-Object -ComObject shell.application).Namespace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items().item('%%~nxa').InvokeVerb('PinToStartScreen')"
)
echo Done!
exit
运行后报错,提示:
不能对 Null 值表达式调用方法。
所在位置 行:1 字符: 1
+ (New-Object -ComObject shell.application).Namespace('shell:::{4234d49 ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [],RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
第二段代码(powershell)如下:
function Pin-App {
param(
[string]$appname,
[switch]$unpin
)
try {
if ($unpin.IsPresent) {
((New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | ? { $_.Name -eq $appname }).Verbs() | ? { $_.Name.replace('&', '') -match 'From "Start" UnPin|Unpin from Start' } | % { $_.DoIt() }
return "App '$appname' unpinned from Start"
}
else {
((New-Object -Com Shell.Application).NameSpace('shell:::{4234d49b-0245-4df3-b780-3893943456e1}').Items() | ? { $_.Name -eq $appname }).Verbs() | ? { $_.Name.replace('&', '') -match 'To "Start" Pin|Pin to Start' } | % { $_.DoIt() }
return "App '$appname' pinned to Start"
}
}
catch {
Write-Error "Error Pinning/Unpinning App! (App-Name correct?)"
}
}
Pin-App "微信"
Pin-App "腾讯QQ"
Pin-App "360极速浏览器"
pause
运行后提示成功,但实际无效果。
有哪位精通powershell的给点帮助?
|
|