Nytt script, “Pin to taskbar”


Skrev for en kort stund siden om automatisering av Pin to Start menu og Pin to taskbar. Og da spesielt det faktum at vi ikke tilbyr særlig grad av funksjonalitet for å gjøre dette, noe mange ønsker i større utrullinger. Jeg posta da et enkelt VB script for å automatisere det.

Ragnar Harper i Crayon fulgte opp med en powershell utgave av scriptet og etter litt mailing fram og tilbake har vi nå en ganske bra, om enn fortsatt enkel versjon med integrert multi språk støtte, såvidt litt feilhåndtering og støtte for start-meny pinning også.

 

Vi har fortsatt flere planer for hvordan vi skal utvide det, neste trinn blir nok å legge til mulighet for fjerning også, samt å søke gjennom Path angitt i env dersom bruker kun angir en exe fil som parameter.

 

   1: # ============================================================================================== 
   2: # 
   3: # 
   4: # NAME: Add-ToTaskbar.ps1 
   5: # 
   6: # AUTHOR: Ragnar Harper , Crayon 
   7: #         Kristian Svantorp, Microsoft
   8: # DATE  : 17.04.2009 
   9: # 
  10: # COMMENT: 
  11: # Locale supported: Norwegian, English, Swedish, Danish, Finnish
  12: # 
  13: #    http://blog.crayon.no/blogs/ragnar 
  14: #    http://blogs.technet.com/kristian
  15: # 
  16: # Changelog:
  17: # KS: Added multilanguage support, automated. Added Nordic verbs 
  18: # KS: Changed path splitting
  19: # KS: Added some error-handling, test-path
  20: # KS: Added -s parameter for pinning to start menu instead
  21: #
  22: #
  23: # Todo:
  24: # KS: Get the verbs in the languages listed above
  25: #  : Add error handling
  26: #  : Use env:path instead if not given full path
  27: #  : Add switch to pin to start-menu instead. default taskbar, param for startmenu
  28: # ============================================================================================== 
  29:  
  30: $PinVerbTask = @{}
  31: $PinverbTask['En-US'] ="Pin to Taskbar" 
  32: $PinverbTask['Nb-No'] ="Fest til oppgavelinjen"
  33: $PinverbTask['Sv-se'] = "Fäst i Aktivitetsfältet"
  34: $PinverbTask['Da-dk'] = "Fastgør til proceslinje"
  35: $PinverbTask['Fi-fi'] = "Kiinnitä tehtäväpalkkiin"
  36:  
  37:  
  38: $PinVerbStart = @{}
  39: $PinverbStart['En-US'] ="Pin to Start Menu" 
  40: $PinverbStart['Nb-No'] ="Fest til Start-menyen"
  41: $PinverbStart['Sv-se'] = "Fäst på Start-menyn"
  42: $PinverbStart['Da-dk'] = "Fastgør til menuen Start"
  43: $PinverbStart['Fi-fi'] = "Kiinnitä Käynnistä-valikkoon"
  44:  
  45: ##add the rest
  46:  
  47: ##get culture
  48: $culture = (get-uiculture).Name
  49:  
  50: if($args.count -lt 1) 
  51: { 
  52:     Write-Host "`nWrong number of arguments." 
  53:     Write-Host "usage: Add-ToTaskbar.ps1 [program to pin] [-s]" 
  54:     Write-Host "example: Add-ToTaskBar.ps1 c:\windows\system32\calc.exe" 
  55:     Write-Host "Parameter -s pins program to start menu instead"
  56:     Write-Host "You must include folderpath to program `n" 
  57: } 
  58: else 
  59: { 
  60:     $file=$args[0]     
  61:     #Check to see if path actually exists
  62:     if(-not (test-path $file)) { write-host "`nPath does not exist.`n $file `nExiting... `n";  exit  }
  63:        
  64:     #this should only be done if a full path is given    
  65:     $path= split-path $file
  66:     #Create shell envir
  67:     $shell=new-object -com "Shell.Application" 
  68:     $folder=$shell.Namespace($path)   
  69:     $item = $folder.Parsename((split-path $file -leaf))
  70:    
  71:     $verbs=$item.Verbs()    
  72:     if($args[1] -eq "-s") {foreach($v in $verbs){if($v.Name.Replace("&","") -match $PinVerbStart[$culture]){$v.DoIt()}}}
  73:     else { foreach($v in $verbs){if($v.Name.Replace("&","") -match $PinVerbTask[$culture]){$v.DoIt()}} }
  74: }
  75:  
  76:  
  77:  

Multi culture/språk ble implementert enkelt med en hash, linje 30, som inneholder verbnavnet på ulike språk og har culture koden som nøkkel. (denne bør ha DisplayLanguage som nøkkel i neste versjon)

På linje 40 henter vi inn culture fra OS og lagrer i en variabel for senere bruk. Denne brukes som key i hashen på linje 72 eller 73.

Støtte for startmeny var bare en linje ekstra til slutt, der vi kaller et annet verb om parameter –s er angitt.

Foreløpig er det ikke stort med feilhåndtering, eneste vi sjekker på er om path som er angitt faktisk eksisterer. Funksjoner der som er gode å vite om hvis du bruker powershell mot filsystemet, Split-path og test-path, brukes her. (help path i PS vil gi deg enda et par)

(ikke testa på finsk, dansk, svensk, men såvidt meg bekjent er det riktige setninger)

 

Scriptet ligger på :

http://blog.crayon.no/files/folders/scripts/entry12967.aspx og heter add-pinnedapplication.ps1. Den siten blir oppdatert med siste versjon når vi fikser mer.

 

edit: Fiksa minor greier i scriptet (cut&paste feil), samt endre get-culture til get-uiculture, som blir mer korrekt.

Comments (2)

  1. Enkleste er jo å kjøre det fra en powershell console, da skriver du bare .Add-PinnedApplication.ps1 C:Windowsnotepad.exe"

    Hvis du skal eksekvere det slik du skriver der bør du nok bruke -f parameteren til powershell, den angir script fil som skal kjøres. Funker fint her med kommandoen din og -f før navnet på ps fila.

  2. Janke says:

    Hei, har prøvd å få dette til å fungere, men får det ikke helt til. Noen yttterligere tips dere kan komme med ??

    Kjører

    "powershell .Add-PinnedApplication.ps1 C:Windowsnotepad.exe"

    men ingenting skjer

Skip to main content