Køre powershell scripts ved dobbelt klik

Jeg havde en opgave for en kunde, hvor det krævede at brugere kunne køre et powershell script ved at dobbelt klikke på det. Domænet havde en GPO der ændrede alle typer script filer til at blive eksekveret via notepad. Det måtte der ikke ændres på.

En quick and dirty løsning havde været at ændre i Computer\HKEY_CLASSES_ROOT\Microsoft.PowerShellScript.1\Shell\Open\Command fra “C:\Windows\System32\notepad.exe” “%1” til “C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe” -noLogo -ExecutionPolicy unrestricted -file “%1”

Det er bare så langt fra best practice at det kun kan anbefales til en test pc.

En lidt pænere, om end ikke super løsning var at lave en batchfil der kaldte scriptet.

Filerne blev lagt ud via en GPO settings sat i Computer Configuration\Preferences\windows Settings\Files

ps1 og cmd fil i en mappe, og en genvej til cmd filen til alle brugernes skrivebord – “c:\users\public\desktop\navn på link.lnk”

Indholdet i Batchfilen er:

“C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File c:\!Scripts\scriptfile.ps1

Genvejen på skrivebordet fik i samme omgang et ikon der passede til hvad det gjorde, bare for at gøre det mere brugervenligt.

VN:F [1.9.22_1171]
Rating: 0.0/6 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Powershell – Find ip og start browser

I forbindelse med et projekt skulle en ikke domain joined pc kunne flyttes til forskellige butikker, men altid kunne tilgå en specifik url i hver butik. Det kunne løses ved at lave genveje til alle de butikker der besøges og bare ligge dem i favorites. Udover at det senere ville kunne ændres og at alle butikker kan nås over netværket. Så kunne det gøre at brugeren åbnede for en forkert butik.

Den nemme og vedligeholdelses fri løsning blev at lave et Powershell script der launchede Edge med en url baseret på netkortets ip konfiguration. Pc’erne får altid en adresse hvor den sidste oktet altid er 3 cifre lang. Så der blev snydt lidt og lavet en Length-3. og de + 100 var fordi det er ip’en som skal nåes i hver butik. Til sidst eksekveres Edge med url’en.

$ip=get-WmiObject Win32_NetworkAdapterConfiguration|Where {$_.Ipaddress.length -gt 1}
$theUrl = ‘http://’+$ip.ipaddress[0].substring(0,$ip.ipaddress[0].Length-3) + 100

start shell:AppsFolder\Microsoft.MicrosoftEdge_8wekyb3d8bbwe!MicrosoftEdge $theUrl

Nu her et halvt år efter, så skulle jeg igen bruge noget lignende, dog kunne jeg ikke være sikker på den sidste oktet, og det var Chrome der skulle benyttes.

Endnu en gang ikke voldsom pæn løsning, men det virker. Den splitter ip’en på punktum, og de 3 første segmenter benyttes og der tilføjes ip og underbibliotek. Den launcher så chrome.

$ip=get-WmiObject Win32_NetworkAdapterConfiguration|Where {$_.Ipaddress.length -gt 1}
$IPByte = $ip.ipaddress[0].Split(“.”)
$theUrl = “http://”+($IPByte[0]+”.”+$IPByte[1]+”.”+$IPByte[2]) + “.231/urlstreng”
Start-Process “chrome.exe” $theUrl

Bemærk at den første linje i begge scripts søger gennem alle netværks adapters på pc’en, og tager den hvor længden af ip strengen er længere end 0. Hvis der er 2 netkort med tilknyttet ip, så får du også 2 resultater ud af den linje.

VN:F [1.9.22_1171]
Rating: 0.0/6 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)