我相信大家肯定有过把一些文件或者快捷方式pin到我们的开始菜单里,这样可以很方便的操作,甚至pin到任务栏上。
今天我们要用PowerShell来模拟pin的方式把我们的文件pin到开始菜单里,废话不多说,先放上写的代码,稍后我们来一步步讲解下原理。
Function Pin-Start
{
Param
(
[String[]]$PinItems
)
$Shell = New-Object -ComObject Shell.Application
$Desktop = $Shell.NameSpace(0X0)
Foreach($item in $PinItems)
{
If(Test-Path -Path $item)
{
$itemLnk = $Desktop.ParseName($item)
$itemVerbs = $itemLnk.Verbs()
Foreach($itemVerb in $itemVerbs)
{
If($itemVerb.Name.Replace("&","") -match "Pin to Start")
{
$itemVerb.DoIt()
}
}
}
}
}
Pin-Start -PinItems "C:\XMLSample"
实现效果如下(由于我这里用的是Windows 7之后的操作系统,所以效果会有些不一样):
我们可以看到XMLSample文件已经被我们pin到开始菜单里了。
那么让我们看看代码是如何做到的,我们首先定义了一个COM对象。
$Shell = New-Object -ComObject Shell.Application
$Desktop = $Shell.NameSpace(0X0)
这里的0X0在该名称空间里代表我们的桌面右键菜单,因为在这里很好的声明了该桌面实例,我们才能很好的去模拟菜单的动作。
紧接着,我们解析出我们要pin的item的路径,然后我们用一个判断语句来模拟我们手动去执行pin到开始菜单的动作。
$itemLnk = $Desktop.ParseName($item)
$itemVerbs = $itemLnk.Verbs()
Foreach($itemVerb in $itemVerbs)
{
If($itemVerb.Name.Replace("&","") -match "Pin to Start")
{
<strong>$itemVerb.DoIt()</strong>
}
}
最后最重要的一个动作就是DoIt(),我们用这个方法去告诉系统我们确定要执行该操作,最后我们成功了。