Powershell

Liittynyt
16.10.2016
Viestejä
543
Olisi kiva kuulla minkälaisessa käytössä ihmiset hyödyntävät PowerShelliä. Itse käytän lähes päivittäin erilaisten automaatioiden kanssa, integraatioiden ja datan parsimisessa. Ainoa ongelma on tietyissä tilanteissa hitaus, mutta muuten kyllä mielestäni aivan loistava kieli ja kehys.
 

Aaltoliike

Alkuperäinen jäsen
Liittynyt
19.10.2016
Viestejä
1 249
Täytyy ihan rehellisesti sanoa, että ainoa kosketukseni PowerShelliin ikinä on ollut tuo sinun tekemä mahtava koodinpätkä :D

E: Ei ole oikein edes käsitystä mitä tällä voikaan tehdä.
 

Kautium

IOdootti
Tukijäsen
Liittynyt
16.10.2016
Viestejä
19 527
Olisi kiva kuulla minkälaisessa käytössä ihmiset hyödyntävät PowerShelliä. Itse käytän lähes päivittäin erilaisten automaatioiden kanssa, integraatioiden ja datan parsimisessa. Ainoa ongelma on tietyissä tilanteissa hitaus, mutta muuten kyllä mielestäni aivan loistava kieli ja kehys.
Suurempien kokonaisuuksien automatisointi ja järjestelmähallinta, sekä miljoona pientä pikkujuttua hoituvat sillä. Jos tiedän jonkin asian toistuvan yli 5 kertaa, teen siitä Powershell-skriptin sekä kotona että töissä. :D

Eipä ole yhtä pätevää kieltä tullut vastaan.

Jos ei ole entuudestaan tuttu juttu, niin Powershell Studiolla saa tehtyä myös graafisen käyttöliittymän Powershell-sovellukselle kohtuullisen helpolla ja sillä voi kiertää suoraan mm. tarpeet execution policyn asettamiselle jne. Se on maksullinen sovellus, mutta niinhän ne parhaat aina ovat. Meinasin tehdä sillä UI:n sille vanhan muron tyhjennysskriptille, mutta en viitsi alkaa tuusaamaan sen kanssa, kun
a.) en oikein ymmärrä miksi ne vanhat viestit pitäisi poistaa ylipäätään (kopiointi olisi ok, mutta ei poisto)
b.) se skripti on vielä keskeneräinen
c.) ilmeisesti se ei voi toimia enää muutenkaan, kun murossa on nyt estetty viestien editointi sen vuoksi :D
 
Liittynyt
16.10.2016
Viestejä
543
Muutamia Powershell komentoja ja alkeita listattuna tähän. Tätä voi kokeilla avaamalla PowerShell ISE kehitysympäristön ja kopioimalla tämän sinne.
Koodi:
# tämä on yksirivinen kommentti

<#
    Tämä on monirivinen kommentti
    Powershell-kieli on erittäin rikas oliokieli
    kaikki ovat rikkaita olioita joita on helppo käsitellä . notaatiolla
    vaatii .net frameworkin toimiakseen ja .net metodeja ja luokkia voidaan natiivisti käyttää
#>

# muuttujat alkavat aina $-merkillä
$fileItem = "tiedostonNimi.txt"
$number = 10
$doStuff = $true

# konsoliin voidaan tulostaa eri tavoin
# 1. joko suoraan kirjoittamalla muuttuja
$file

# 2. Tai muutamilla eri komennoilla
Write-Host "Tämä komento kirjoittaa vain konsoliin"
Write-Output "Tämä komento on parempi kun halutaan lokittaa tulostuksia"
Write-Warning "Voidaan kirjoittaa myös varoituksia"
Write-Verbose "Funktioissa voidaan käyttää Verbose-tulostusta"

# Powershellissä on useita käteviä ja hyödyllisiä komentoja jonka tulokset voidaan aina tallentaa muuttujaan
# komennot ovat AINA muotoa Verbi-Substanttiivi
$files = Get-ChildItem -File

# komentoja voidaan myös ns. pipelinettaa, eli ketjuttaa toisiinsa
# tässä kerätään kansiossa olevat tiedostot muistiin ja poistetaan ne yksitellen Remove-Item-komennolla käyttäen pipelinea eli | merkkiä 
Get-ChildItem -File | Remove-Item -WhatIf

# ehtolauseissa operaattoreina toimii nämä sanalliset operaattorit -eq -gt -lt -ge -le -in -and -or -match -like
# esim. -gt on greater than, -lt less than, -eq equal

if(($fileItem.Name.Length -gt $number) -and $doStuff)
{
    # jos yllä oleva ehto on totta niin suoritetaan tämä aaltosuluilla rajattu koodiblokki
}
else
{
    # muussa tapauksessa suoritetaan tämä blokki
}

# verkkosivuille voidaan tehdä requesteja Invoke-WebRequest komennolla:
$request = Invoke-WebRequest -Uri "https://bbs.io-tech.fi/threads/powershell-scriptaus.1216/"

# tulokset voidaan tallentaa muuttujaan ja sivun sisältöä voidaan tarkastella
$request.Content

# erilaisia looppeja

# 1. while
while($true)
{
    # kun ehto on totta suoritetaan tätä blokkia
}

# 2. foreach
foreach($file in $files)
{
    # käydään läpi $files listassa olevat objektit
}

# 2.2 pipeline foreach-komento jossa iteroitava objekti on aina muuttujassa $_
$files | ForEach-Object {$_}

# 3. for-looppi
for($i=0;$i -lt 10;$i++)
{
    $i
}
 
Liittynyt
19.10.2016
Viestejä
1 560
Kätevä Online GUI Generator PowerShellille

https://poshgui.com/#
En ole ainakaan toistaiseksi tarvinnut Powershelliä mihinkään, joten tulipa kyllä yllätyksenä, mihin sillä pystyykään! Ei tullut mieleenkään, että GUI-jutut onnistuisivat Powershellillä. Mahdollisesti sitten toinen juttu, kuinka fiksua on tehdä GUI-juttuja käyttöjärjestelmän skriptaukseen tarkoitetulla kielellä, mutta hienoa silti.
 
Liittynyt
20.10.2016
Viestejä
403
Mitenkäs tuon PowerShell-skriptin rakenteen tulee mennä? Aloitetaan "yksinkertaisella" esimerkillä: skripti, jossa n kappaletta käynnistysparametreja ja yksi funktio. Meneekö se näin?
Koodi:
Param
(
    [string]$logpath = "d:\logs",
    [string]$server = "localhost"
)

function Jotain()
{
   Param
   (
       [string]$Name,
       [int]$Hits
   )
   #koodia
}

Write-Host "Kutsutaan funktiota"
Jotain "Nakki" 5
#lisää koodia
#tehdään jotain
 

Kautium

IOdootti
Tukijäsen
Liittynyt
16.10.2016
Viestejä
19 527
Tapoja on yhtä monia kuin on tekijöitäkin, mutta toki suosituksia kannattaa noudattaa.

Windows PowerShell: Scripting Crash Course | TechNet Magazine

Don Jonesilla on loistavia videoita ja kursseja siitä mitä kannattaa tehdä ja kuinka:



Tässä osittain samoja asioita, mutta vähän laajemmin (videon kuva on huono, mutta sisältö on rautaa):

 
Liittynyt
16.10.2016
Viestejä
543
Ihan oikein tuo menee mallissasi. Funktioiden nimissä kannattaa suosia Verbi-Substanttiivi konventiota ja scriptin alkuun kannattaa tehdä help blokki. Vakioverbit löytyy komennolla Get-Verb.
 
Liittynyt
29.10.2016
Viestejä
1 416
En ole paljoa Powershelliin koskenut mutta eikö esim. Cygwinin terminaali aja saman asian mutta in vielä lähempänä Linuxia (mitä powershell kai koittaa "matkia").
 

Kautium

IOdootti
Tukijäsen
Liittynyt
16.10.2016
Viestejä
19 527
En ole paljoa Powershelliin koskenut mutta eikö esim. Cygwinin terminaali aja saman asian mutta in vielä lähempänä Linuxia (mitä powershell kai koittaa "matkia").
Suurin virhe Powershellistä puhuttaessa on juuri tuo, että tietty porukka kuvittelee edelleen sen yrittävän matkia *nixien shelliä, vaikka kyse on oikeasti ihan eri kokoluokan ja eri ajatusmaailman komentokielestä. Powershell perustuu objekteihin ja sitä kautta aukeaa täysin uusi maailma datan käsittelyyn. Suosittelen oikeasti tutustumaan tarkemmin.

Ja terminaaleista puhuttaessa on syytä huomioida, että Bashin saa nykyään halutessaan myös Windowsille -->

Bash for Windows: Why it’s awesome and what it means for PowerShell
 
Liittynyt
17.10.2016
Viestejä
401
Tarvisin powershellille yksinkertaisen skriptin mikä kokeilee kaikki 16 numeron mittaiset numerosarjat läpi komentorivi komennon sisällä.
(fastboot oem unlock $koodi)
Todella vähän tullut mitään kieliä käytettyä, joten tuommosen loop+1 koodin tekeminen ei oikein luonnistu.

Pitäisi tabletin bootloaderin lukitus poistaa, mutta poistokoodia en saa tehtyä koska product id puuttuu ja koko vekotin on niin solmussa että en sitä pääse asetuksista näkemään.
En osaa powershelliä mutta tuli mieleen sellainen juttu, että toimiiko tuohon ihan simppeli bruteforce? Tarkoitan, että antaako tuo kyseinen tabletti yrittää noita koodeja loputtomasti läpi ilman että se lukittuu tms? Toisekseen, kuinka usein tuo antaa yrittää tuota koodia? Voi nimittäin olla aikaavievä operaatio jos pitää 16 merkin mittaiset numerosarjat käydä läpi ellei niitä voi kokeilla sekunnissa useita miljoonia ;)
 
Liittynyt
16.10.2016
Viestejä
543
Voi nimittäin olla aikaavievä operaatio jos pitää 16 merkin mittaiset numerosarjat käydä läpi ellei niitä voi kokeilla sekunnissa useita miljoonia ;)
Laskeskelin tossa, että edes useat miljoonat sekunnissa ei ole tarpeeksi kova vauhti koska silloinkin pitää odottaa lähes 100 vuotta...
 
Liittynyt
17.10.2016
Viestejä
401
Laskeskelin tossa, että edes useat miljoonat sekunnissa ei ole tarpeeksi kova vauhti koska silloinkin pitää odottaa lähes 100 vuotta...
Näin tosiaan laskeskelin itsekkin, kyllä noi on yleensä rakenneltu niin, että se bruteforcettaminen on melko toivotonta. Se siitä offtopicista.
 
Viimeksi muokattu:
Liittynyt
17.10.2016
Viestejä
960
Olisi tarve saada kansiosta ja alikansioista tiedostojen nimet csv muodossa. Tiedostopäätteeitä ei tarvitse olla. Mikähän olisi fiksuin tapa lähteä tekemään kyseistän koodinpätkää?
 

SVS

Liittynyt
18.12.2016
Viestejä
123
Olisi tarve saada kansiosta ja alikansioista tiedostojen nimet csv muodossa. Tiedostopäätteeitä ei tarvitse olla. Mikähän olisi fiksuin tapa lähteä tekemään kyseistän koodinpätkää?
Tällä tulee myös päätteet:
Koodi:
Get-ChildItem G:\ -Recurse | ForEach-Object{   
    echo $_.Name >> "file.csv"
    }
 

Kautium

IOdootti
Tukijäsen
Liittynyt
16.10.2016
Viestejä
19 527
Olisi tarve saada kansiosta ja alikansioista tiedostojen nimet csv muodossa. Tiedostopäätteeitä ei tarvitse olla. Mikähän olisi fiksuin tapa lähteä tekemään kyseistän koodinpätkää?
Siis pelkästään tiedostojen nimet jostakin hakemistorakenteesta?

Jos näin, niin riittäisikö tämä:
Koodi:
Get-Childitem -Path C:\RootDirectory -Recurse -File | Sort-Object | ft Name | Out-File -FilePath C:\Temp\FileList.csv
Tuo tuottaa tiedostoon listauksen määritellyssä hakemistorakenteessa olevista tiedostoista aakkosjärjestyskessä. Mukaan tulee oletuksena myös otsikkorivi ja tiedostojen päätteet, mutta ne saa kyllä pois jos on tarvetta.

Myös tuo SVS:n esimerkki on tavallaan muuten ok, mutta se tuottaa listalle myös hakemistot tiedostojen lisäksi.
 
Liittynyt
22.10.2016
Viestejä
1 009
Auttakaas tyhmää, saako tuolla PowerShell ohjelmalla palautettua CapsLock-lukonkuvan näkyviin? :(
-Tai jos jotenkin muuten saisi sen taas näkyviin... :sori:
 

Kautium

IOdootti
Tukijäsen
Liittynyt
16.10.2016
Viestejä
19 527
Auttakaas tyhmää, saako tuolla PowerShell ohjelmalla palautettua CapsLock-lukonkuvan näkyviin? :(
-Tai jos jotenkin muuten saisi sen taas näkyviin... :sori:
Powershell on komentotulkki/ohjelmointikieli, jolla voi voi komentaa käyttöjärjestelmää tekemään kaikenlaista, mutta ei tuo kysymyksesi kuitenkaan siihen liity.

Kannattaa kokeilla vaikka jotain sopivaa Windows-ketjua, mutta muista laittaa mukaan tiedot mistä käyttöjärjestelmästä ja/tai sovelluksesta on kyse jne. Minä en muista Windowsissa nähneeni CapsLock -kuvaketta sitten Win95:n, joten en osaa auttaa muutenkaan. Office-sovelluksissa se taitaa näkyä. Helppokäyttökeskuksesta (vai mikä se nyt suomeksi olikaan) voi laittaa päälle ainakin äänimerkin silloin kun numlockia/capslockia painetaan.
 
Liittynyt
17.10.2016
Viestejä
960
Siis pelkästään tiedostojen nimet jostakin hakemistorakenteesta?

Jos näin, niin riittäisikö tämä:
Koodi:
Get-Childitem -Path C:\RootDirectory -Recurse -File | Sort-Object | ft Name | Out-File -FilePath C:\Temp\FileList.csv
Tuo tuottaa tiedostoon listauksen määritellyssä hakemistorakenteessa olevista tiedostoista aakkosjärjestyskessä. Mukaan tulee oletuksena myös otsikkorivi ja tiedostojen päätteet, mutta ne saa kyllä pois jos on tarvetta.

Myös tuo SVS:n esimerkki on tavallaan muuten ok, mutta se tuottaa listalle myös hakemistot tiedostojen lisäksi.
Joo tuohan teki suoraan sen mitä halusin. Kiitosta vain.
 
Liittynyt
16.04.2017
Viestejä
324
Windows 10 uusimmassa päivityksessä tuli havaittua Microsoftin pyrkimystä saada käyttäjiä tottumaan PowerShelliin Command Promptin sijaan. Itse en ole paras skriptaamaan, mutta käytän nykyään PowerShelliä siihen mitä Command Promptilla pystyy myös tekemään (esim. ping, ipconfig jne). :kahvi:
 
Liittynyt
01.11.2016
Viestejä
72
Tietääkö kukaan mitään simppeliä tapaa millä saisi ajettua powershelliä taustalla huomaamattomasti ilman powershell-ikkunaa? Tarkoitus olisi kuunnella ja reakoida eri eventteihin, mutta Register-ObjectEvent on voimassa vain sen aikaa kun powershell-sessiokin on auki.
 

Kautium

IOdootti
Tukijäsen
Liittynyt
16.10.2016
Viestejä
19 527
Liittynyt
01.11.2016
Viestejä
72
Kun nyt vauhtiin pääsin Powershellin kanssa niin viisaammille olisi vielä yksi kysymys.

Seuraava toimii odotetusti Windows 7:ssa, mutta ei Windows 10:ssä:

Koodi:
$sysevent = [microsoft.win32.systemevents]
Register-ObjectEvent -InputObject $sysevent -EventName "SessionSwitch" -Action {Write-Host ($args[1]).Reason}
Eli consoleen tulostuu SessionLock kun lyön Windowsin lukkoon ja SessionUnlock taas avatessa. Windows 10 ei näytä reagoivan tuohon lainkaan. Onkohan tuon SessionSwitchin ja/tai Windowsin lukituksen toiminnassa jotain perustavanlaatuista eroa Windows 7:aan verrattuna, joka tulisi huomioida?
 

Kautium

IOdootti
Tukijäsen
Liittynyt
16.10.2016
Viestejä
19 527
Kun nyt vauhtiin pääsin Powershellin kanssa niin viisaammille olisi vielä yksi kysymys.

Seuraava toimii odotetusti Windows 7:ssa, mutta ei Windows 10:ssä:

Koodi:
$sysevent = [microsoft.win32.systemevents]
Register-ObjectEvent -InputObject $sysevent -EventName "SessionSwitch" -Action {Write-Host ($args[1]).Reason}
Eli consoleen tulostuu SessionLock kun lyön Windowsin lukkoon ja SessionUnlock taas avatessa. Windows 10 ei näytä reagoivan tuohon lainkaan. Onkohan tuon SessionSwitchin ja/tai Windowsin lukituksen toiminnassa jotain perustavanlaatuista eroa Windows 7:aan verrattuna, joka tulisi huomioida?
Ei näyttäisi toimivan kasissakaan, eli jotain on vissiin tosiaan muuttunut, jos se toimi vielä seiskassa.

Dokumentaatio sanoo tuosta eventistä, että "occurs when the currently logged-in user has changed". Lukituksessa tuota ei ilmeisesti sitten enää tapahdu, tai sitten siihen ei vain pääse tuolla tavalla enää käsiksi.
 
Liittynyt
01.11.2016
Viestejä
72
Ei näyttäisi toimivan kasissakaan, eli jotain on vissiin tosiaan muuttunut, jos se toimi vielä seiskassa.

Dokumentaatio sanoo tuosta eventistä, että "occurs when the currently logged-in user has changed". Lukituksessa tuota ei ilmeisesti sitten enää tapahdu, tai sitten siihen ei vain pääse tuolla tavalla enää käsiksi.
Näyttäisi olevan nimenomaan PowerShellin versiosta riippuvainen eikä niinkään Windowsin. Oletuksena luonnollisesti käynnistyy tuorein versio (mulla 5.1), mutta versiolla 2 näyttäisi toimivan.

Koodi:
PS C:\Users\datwin> PowerShell -version 2
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS C:\Users\datwin> $PSVersionTable

Name                           Value
----                           -----
CLRVersion                     2.0.50727.8784
BuildVersion                   6.1.7600.16385
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1


PS C:\Users\datwin> $sysevent = [microsoft.win32.systemevents]
PS C:\Users\datwin> Register-ObjectEvent -InputObject $sysevent -EventName "SessionSwitch" -Action {Write-Host ($args[1]).Reason}

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
1      f2874510-20a...                 NotStarted    False                                Write-Host ($args[1])....
Sitten kone lukkoon ja taas auki...

Koodi:
PS C:\Users\datwin> SessionLock
SessionUnlock
Eli toimii siis, mutta jotain on muuttunut versioiden välillä. Täytyy jatkaa sherlockointia tuon osalta.
 
Liittynyt
18.10.2016
Viestejä
19
Varsin kätevä oli tehdä skripti joka pistää React Native -devaustyökalut käyntiin. Eli kirjoitin pätkän joka käynnistää Android-emulaattorin ja sitten React Nativea varten kolme terminaali-ikkunaa ja asettelee ne ruudulle nätisti. Lopuksi vielä Visual Code käyntiin myös. Kaikki tämä yhdestä kuvakkeesta työpöydältä, onpa nyt mukavaa aloittaa hommat. :)
 
Liittynyt
20.04.2017
Viestejä
580
Varsin kätevä oli tehdä skripti joka pistää React Native -devaustyökalut käyntiin. Eli kirjoitin pätkän joka käynnistää Android-emulaattorin ja sitten React Nativea varten kolme terminaali-ikkunaa ja asettelee ne ruudulle nätisti. Lopuksi vielä Visual Code käyntiin myös. Kaikki tämä yhdestä kuvakkeesta työpöydältä, onpa nyt mukavaa aloittaa hommat. :)
Sharing is caring?! :)
 
Liittynyt
16.10.2016
Viestejä
543
Pakko herätellä tätä ketjua taas. Töissä tullut taas automatisoitua kaikkea Powershellillä ja kyllä se vaan on kova kieli ja alusta. Nyt varsinkin kun core toimii oikeasti myös Linuxissa ja Macillä. Näppärästi toimii myös Docker- ja Kubernetes-komentojen kanssa, kun niiden outputin laittaa ensiksi JSON-muotoon jolloin vastaukset saa konvertoitua Powershell-objekteiksi.

Nythän myös pukkaa 7-versiota pian ulos joka pyrkii pääsemään eroon siitä erillisestä Windows Powershell-versiosta.
 
Liittynyt
22.11.2017
Viestejä
281
Kyttään taloyhtiöni sivuilta vapautuvia autopaikkoja ja tähän on varmasti jokin helpompi tie kuin käydä päivittäin sivuilla katsomassa. Saako esim. Powershelliin ajettua jonkin komennon joka osaisi tarkkaila tätä sivua ja lähettää sitten sähköpostiini tiedon kaikista muutoksista?
 
Toggle Sidebar

Statistiikka

Viestiketjut
237 482
Viestejä
4 163 773
Jäsenet
70 414
Uusin jäsen
O&G

Hinta.fi

Ylös Bottom