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: #    https://blog.crayon.no/blogs/ragnar 
   14: #    https://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å :

https://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.