June 3, 2020
  • 3:00 am Microsoft 365 -käyttäjätilin kaappaamiseen reagointi – Tilanteen normalisointi
  • 12:40 am Microsoft 365 -käyttäjätilin kaappaamiseen reagointi – Tilin turvaaminen
  • 1:28 am Windows 10 – Chocolatey-paketinhallinta ja ohjelmistoasennusten automatisointiskripti
  • 8:06 pm Windows 10 -käyttäjäprofiilin migraatio Azure AD -tenanttimuutoksen yhteydessä (USMT)
  • 10:06 pm Microsoft Teams -kalenterikutsut eivät reitity toivotusti sähköpostipalveluiden ollessa G Suitessa

Harjoituksessa käytetty laitteisto/ohjelmisto:

  • Tietokone (Asus Z170-A, i7-6700K , 16GB DDR4 3200MHz, Evga 1070 sc)
  • Oheishärpäkkeet
  • Windows 10 Pro 64-Bit ( versio 1607)
  • PowerShell versio 5.1.14393.1358

Hello World in PowerShell

Write-Host cmdlet antaa minun kirjoittaa viestejä PowerShell komentokehotteeseen. Cmdlet tarkoittaa kevyttä PowerShell-ympäristössä käytettävää komentoa.
Syntaksista sen verran, että yksittäisten heittomerkkien kanssa, teksti kirjoitetaan juuri määrittelemälläni tavalla.

Write-Host 'Hello World!'

Lainausmerkkien kanssa PowerShell voi tunnistaa virkkeestä muuttujia yms.

Write-Host "Hello World!"

Hello World esimerkin kanssa ei ole havaittavissa eroa, mutta tuo kannattaa pitää mielessä. Tosin, jos haluaa esimerkiksi rivinvaihdon ennen uutta virkettä, niin voi käyttää `n. Tällöin täytyy laittaa lainausmerkit, sillä muuten PowerShell siteeraa minua kirjaimellisesti.

Write-Host "Hello World! `nMy first script!`nYAHOO!"

Huomaa ero kahden välillä tulostuksessa:
vert
Tässä vaiheessa totesin samalla, että fonttikoko on vähän turhan pieni. PowerShellin fonttikoon voi muuttaa avaamalla PowerShellin järjestelmänvalvojana ja navigoimalla: Ominaisuudet > Fontti PowerShell ikkunan yläpalkista hiiren oikealla klikillä.
ominaisuudet
font
Hello World! näkyy nyt vähän suurempana.
helloworld


PowerShell skriptien ajaminen

PowerShell skriptien tiedostopääte on .ps1. Skriptin voi kirjoittaa vaikka muistiossa ja ajaa sitten PowerShellissä.
Kokeilenpa Hello Worldia nyt skriptinä, eli PowerShell kirjoittaa “Hello World!” koneeni työpöydälle hello.txt tiedostoon.
Tiedostosijainti kannattaa määritellä, sillä muuten tiedosto luodaan Windowsin kansioon System32.

# Muuttuja
$text = 'Hello World!'
# Luo tiedosto ja kirjoita siihen
$text | Set-Content 'C:\Users\Markus\Desktop\hello.txt'

Skriptit ajetaan kutsumalla niitä PowerShellissä tiedostonimen ja -sijainnin mukaan:

C:\Users\Markus\Desktop\PowerShell\testi.ps1

Jos yritän ajaa tekemäni testi.ps1 skriptin saan seuraavan errorin:

C:\Users\Markus\Desktop\PowerShell\testi.ps1 : File C:\Users\Markus\Desktop\PowerShell\testi.ps1 cannot be loaded because running scr
ipts is disabled on this system. For more information, see about_Execution_Policies at http://go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ C:\Users\Markus\Desktop\PowerShell\testi.ps1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo : SecurityError: (:) [], PSSecurityException
 + FullyQualifiedErrorId : UnauthorizedAccess

fail
Skriptien ajaminen on oletuksena kielletty, joten minun tulee asettaa ExecutionPolicy siten, että saan skriptin ajettua.


PowerShell ExecutionPolicy

ExecutionPolicyja on viittä eri tyyppiä:

  • Restricted – Skriptien ajo on estetty täysin. Vain yksittäisiä komentoja voi ajaa.
  • AllSigned – Vain luotettavan levittäjän skriptejä voidaan ajaa.
  • RemoteSigned – Sallii paikallisten skriptien ajon ja luotettavien ladattujen skriptien ajon.
  • Unrestricted – Kaikki skriptit voidaan ajaa ilman esteitä. Antaa varoituksen ennen ladattujen skriptien ajamista.
  • Bypass – Ei rajoituksia, eikä varoituksia.

ExecutionPolicyn tilan näkee seuraavalla komennolla:

Get-ExecutionPolicy -List

list
Niitä ei siis ole asetettu.
Itseäni kiinnostaa vain omien paikallisten skriptien ajaminen, joten asetan ExecutionPolicyn RemoteSigned.

Set-ExecutionPolicy RemoteSigned

Tämän jälkeen minua pyydettiin varmistamaan tekemäni muutos.
varmistus
Painoin Y, eli kyllä. Siitä seurasi tämmöinen virheilmoitus:

Set-ExecutionPolicy : Rekisteriavainta HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell ei voi käyttä
ä. To change the execution policy for the default (LocalMachine) scope, start Windows PowerShell with the "Run as administrator" opti
on. To change the execution policy for the current user, run "Set-ExecutionPolicy -Scope CurrentUser".
At line:1 char:1
+ Set-ExecutionPolicy RemoteSigned
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 + CategoryInfo : PermissionDenied: (:) [Set-ExecutionPolicy], UnauthorizedAccessException
 + FullyQualifiedErrorId : System.UnauthorizedAccessException,Microsoft.PowerShell.Commands.SetExecutionPolicyCommand

eroro
En ollut suorittanut PowerShelliä järjestelmänvalvojana, joten minulla ei ollut käyttöoikeuksia muutoksen tekemiseksi.
Kokeillaanpa uudelleen adminin oikeuksin:
admin
Sama komento:

Set-ExecutionPolicy RemoteSigned

toimi
Virheilmoituksia ei tullut tällä kertaa, joten katsotaanpa Execution Policyjen tila uudelleen:
list2
LocalMachine on nyt RemoteSigned, eli paikallisten skriptien ajaminen pitäisi nyt onnistua.

C:\Users\Markus\Desktop\PowerShell\testi.ps1

läpi
Ja tiedosto löytyi sisältöineen työpöydältä:
hellokuva.PNG
helloteksti

Ei mitään ihmeellisempää tältä erää, mutta tästä on hyvä jatkaa. On jo pari ideaa, mitä voisi PowerShellillä yrittää toteuttaa.


Lähteet:

Social Technet Microsoft 2012. Open, Write and Close the File using Powershell. URL: https://social.technet.microsoft.com/Forums/scriptcenter/en-US/0a6860f5-9b02-4e79-97fe-05829f2c5ab3/open-write-and-close-the-file-using-powershell?forum=ITCG
ss64. Run a PowerShell script. https://ss64.com/ps/syntax-run.html
Technet Microsoft. Getting Started with PowerShell Scripting for VMM. URL: https://technet.microsoft.com/en-us/library/bb963733.aspx
Using the Write-Host Cmdlet. URL: https://technet.microsoft.com/en-us/library/ee177031.aspx
Technet Microsoft. Using the Set-ExecturionPolicy Cmdlet. URL: https://technet.microsoft.com/en-us/library/ee176961.aspx
Tenforums 2016. Change PowerShell Script Execution Policy in Windows 10. How to Set PowerShell Script Execution Policy in Windows 10. URL: https://www.tenforums.com/tutorials/54585-change-powershell-script-execution-policy-windows-10-a.html


TÄTÄ DOKUMENTTIA SAA KOPIOIDA JA MUOKATA GNU GENERAL PUBLIC LICENSE (VERSIO 3 TAI UUDEMPI) MUKAISESTI. HTTP://WWW.GNU.ORG/LICENSES/GPL.HTML
MARKUS PYHÄRANTA
Markus Pyhäranta

RELATED ARTICLES