Powershell-scriptaus

Kaiser Soze

Johtaja
Liittynyt
18.10.2016
Viestejä
4 961
Olisiko kellään taitoa antaa loitsua jolla pystyisin muuttamaan monen tiedoston nimen kerralla? Jujuna olisi että muutoksen pitäisi koskea vain tiedostoja joiden nimen pituus on enemmän kuin n... Rename-itemillä tuo varmaan hoituu.
 
:comp: :psmoke:
Koodi:
$i=0;$n=10;gci -File|% {if($_.name.Length -gt $n){try{$item=$_;rni $_ "$($_.name.Substring(0,($n-$_.extension.length)))$($_.extension)" -ErrorAction stop}catch{$i++;rni $item "$($item.name.Substring(0,($n-$("$i").length-$item.extension.length)))$i$($item.extension)"}}}
 
Viimeksi muokattu:
No toi nyt oli pieni vitsi. Toimii, mutta kyllähän tuo kannattaa one linerista muuttaa luettavaan muotoon. Toteutus myöskin riippuu siitä miten tiedostot halutaan uudelleen nimetä. Tämä on hyvä harjoittelukeissi.
 
Nyt täytyy sanoa, että alkoi PowerShell-skriptaus kiinnostamaan tuon ©©©:n väsäämän "poista viestihistoriani" -skriptin myötä. Pythonin (hatarat) alkeet ovat hallussa ja joitain opiskelujuttujen laskuja olen automatisoinut CSV-filuun ja sitä kautta exceliin. Mistä näillä pohjilla kannattaisi aloittaa? Pythonin kanssa huomasin, että asioita ei opi muuten kuin itse kokeilemalla. Löytyykö netin syövereistä oppaita harjoitustehtävineen (ja mielellään suomeksi näin alkuun)? :comp:
 
Mistä näillä pohjilla kannattaisi aloittaa? Pythonin kanssa huomasin, että asioita ei opi muuten kuin itse kokeilemalla. Löytyykö netin syövereistä oppaita harjoitustehtävineen (ja mielellään suomeksi näin alkuun)? :comp:

Varmaan paras lähde on Youtube. Siellä on useita hyviä tutoriaaleja. Parhaiten kyllä oppii vain tekemällä. Tämä keskustelu sopii varmaan paremmin tuohon toiseen Powershell-ketjuun. Tein sinne muutamia esimerkkejä alkeista:
https://bbs.io-tech.fi/threads/powershell.614/#post-26873
 
Onko kellään helppoa jippoa, kuinka powershellin scriptillä luotuun pikakuvakkeeseen saisi lisättyä täpän "Run as Administrator"-kohtaan, ettei tarvi manuaalisesti käydä laittamassa. Vai meneekö turhaksi säätämiseksi?

$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$Home\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\KUVAKE.lnk")
$Shortcut.TargetPath = "$Home\network\KUVAKE.bat"
$Shortcut.WorkingDirectory = "$Home\network"
$Shortcut.IconLocation = "$Home\network\KUVAKE.ico"
$Shortcut.Save()

Itselleni vastaten:

$WshShell = New-Object -ComObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut("$Home\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\KUVAKE.lnk")
$Shortcut.TargetPath = "$Home\network\KUVAKE.bat"
$Shortcut.WorkingDirectory = "$Home\network"
$Shortcut.IconLocation = "$Home\network\KUVAKE.ico"
$Shortcut.Save()
$bytes = [System.IO.File]::ReadAllBytes("$Home\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\KUVAKE.lnk")
$bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON
[System.IO.File]::WriteAllBytes("$Home\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\KUVAKE.lnk", $bytes)
 
Viimeksi muokattu:
PowerShell on kyl mahtava. Mitä enemmän sitä oppii, sitä enemmän siitä tykkää!
 
PowerShell on kyl mahtava. Mitä enemmän sitä oppii, sitä enemmän siitä tykkää!
Kyllä. Vielä kun viitsisi opetella itsensä pois normibatcheistä, niin pääsisi paremmin vauhtiin. Mutta kun...laiska on laiska ja sillisalaatilla edetään. :)
 
Tein yleiskäyttöisen Powershell-funktion joka kysyy käyttäjältä kokonaislukua. Koodi on spoiler-tageissa. Ajattelin, että tässä on aika hyvä harjoitus jos haluaa parannella omia PS-taitojaan. Koita siis tehdä tehtävän mukainen funktio ilman koodin katsomista. :)
  • Tee funktio joka kysyy käyttäjältä positiivista kokonaislukua jonka min ja max arvot voidaan antaa argumentteina funktiolle
  • Esimerkki funktion kutsusta ja parametreista: Get-InputInteger -Minimum 1 -Maximum 100
  • Funktio kysyy käyttäjältä syötettä (käytetään komentoa Read-Host) niin kauan kunnes annettu arvo on luku väliltä 1 - 100
  • Funktio ilmoittaa jos syöte on annettu väärässä muodossa esim. -5, 1.6, asdasd, !!!, tai annettu luku on suurempi kuin 32 bittinen kokonaisluku voi olla

Koodi:
function Get-InputInteger
{
    param([int]$Minimum=0, [int]$Maximum=[int]::MaxValue)

    do
    {
        $luku = Read-Host "Anna positiivinen kokonaisluku $Minimum-$Maximum"

        if($luku -match "^\d+$")
        {
            try
            {
                $luku = [int]$luku
            }
            catch
            {
                Write-Warning "Syötetty luku on liian suuri, syötä pienempi luku"
            }
        }
        else
        {
            Write-Warning "Syöte '$luku' ei näytä positiiviselta kokonaisluvulta, yritä uudestaan"
        }

    }until($luku -is [int] -and $luku -ge $Minimum -and $luku -le $Maximum)

    Write-Host "Annoit luvun: $luku"
    return $luku
}

Get-InputInteger -Minimum 1 -Maximum 10
 
Itse olen skriptaillut VBS:llä vuosikaudet mitä erilaisempia asioita ja nyt muutama vuosi sitten siirtynyt PowerShelliin ja täytyy sanoa, että PowerShell really Rocks!
 

Statistiikka

Viestiketjuista
261 299
Viestejä
4 534 303
Jäsenet
74 784
Uusin jäsen
vanahabanjo

Hinta.fi

Back
Ylös Bottom