Powershell script køres via batch som admin for brugere

I forbindelse med Corona i Danmark, havde en kunde brug for at få rullet et stykke software ud til brugerne, uden disse kunne få kørt det via GPO, da de fleste sad hjemme. Det skulle helst være uden for mange trin for brugeren hvor det kunne gå galt. Og når softwaren blev kørt første gang spurgte den efter en sti til serveren.

Derudover skulle der der aktiveres en komponent i programmet, for at en stor del af funktionerne blev slået til. Hvilket ikke kunne ske i programmet, men der skulle sættes en registreringsnøgle for at det blev synligt for brugeren.

Som om det ikke lyder slemt nok, så var der faktisk også andre ting der skulle sættes alt efter versioner af office pakken, om det var 32 eller 64 bit osv. Nu har jeg ikke en lang gloværdig karriere bag mig med at lave pakker, så jeg tog den “nemme vej” for mig, at tjekke registreringsdatabasen for ændringer, tilføje det til et powershell script der sat det automatisk, og herefter installerede programmet.

Det hele skulle gerne køre så de blot skulle klikke på et link og så kørte installationen. Puha, sikke en masse fyld tekst for at komme til det primære.

Hvordan køres et powershell script som admin

Ved at lave en .cmd fil med følgende “PowerShell -WindowStyle Hidden -NoProfile -ExecutionPolicy Bypass -Command “& {Start-Process PowerShell -ArgumentList ‘-NoProfile -ExecutionPolicy Bypass -File “”%~dp0.\install.ps1″”‘ -Verb RunAs}”” -windowstyle hidden er blot for at skjule så meget som muligt for brugeren. “%~dp0.\” er en lidt speciel måde at fortælle at scriptet skal finde filen i det nuværende bibliotek hvor den køres fra. Dvs. at i mit tilfælde ligger min cmd og min ps1 fil i samme bibliotek.

Men vent, det virker jo ikke det der, med mindre du kører det som administrator, enten med højreklik og kør som administrator eller ctrl+shift+enter på genvejen. Men husker brugerne det? Næppe, derfor skal det gerne være sat automatisk så de blot skal godkende UAC’en der popper frem når genvejen køres.

Det gøres ved at lave en genvej til cmd filen, og på genvejen vælges egenskaber, og herefter advanceret, og “Kør som administrator” vælges. Nu vil brugerne blot skulle klikke på genvejen

Hvordan skriver du til registreringsdatabasen i powershell?

Ja, jeg nævnte godt nok at jeg skulle lave ændringer i registreringsdatabasen, og jeg skulle gøre det via Powershell. Nu er det vigtigt at huske på at situationen er lidt speciel, da brugerne sad hjemme pga. Corona. Men ellers vil jeg aldrig anbefale at skrive til registreringsdatabasen via powershell scripts hvis der normalt er et AD tilstede. For du kan lave de præcis samme ting via GPO’er, hvilket også vil gøre det nemmere at lave ændringer i fremtiden.

Skal der oprettes en nu folder til at indeholde nøgler skrives følgende:

new-item -path ‘hklm:\SOFTWARE\’ -name ‘Foldernavn’

En nøgle i selv samme folder:

New-ItemProperty -path ‘hklm:\SOFTWARE\Foldernavn\’ -Name ‘WebService’ -Value ‘http://miservice.asmx’ -PropertyType string

Rette en nøgle fordi du havde skrevet miservice.asmx og det skulle have været minservice.asmx

set-ItemProperty -path ‘hklm:\SOFTWARE\Foldernavn’ -Name ‘WebService’ -Value ‘http://minservice.asmx’

Efter hver powershell kan der sættes “-ErrorAction SilentlyContinue”.

Starte webside via powershell

Som nævnt var det et nyt program, hvor alle sad hjemme via VPN. Så for at gøre det nemmest muligt for IT afdelingen, og brugeren. Så var der oprettet en side på intranettet omhandlende programmet, og hvordan det skulle bruges. Men hvordan starter man lige en intranet side via powershell, den mest simple måde er blot at skrive start efterfulgt af siden man vil åbne. den bruger i så fald blot standard browseren til at åbne siden med.

start ‘http://intranet/programside’