PowerShell: Kopeerija
<Source lang="powershell">
<#
.SYNOPSIS
Skript kopeerib faile.
.DESCRIPTION
Kuna skriptil on täielik graafiline liides, ei pea käsureale eraldi võtmeid sisestama. Skripti käivitades kuvatakse kasutajale algkausta asukoha valiku dialoog (kust faile otsitakse), järgmiseks küsitakse failinime (sisestatud sõne järgi otsitakse failnimest, ehk otsitakse faile, mille nimes sisaldub otsitav sõne), järgmiseks küsitakse kas teostada failiotsingut valitud algkausta alamkaustadest, järgmiseks kuvatakse leitud failide nimekiri ning küsitakse failide kopeerimise kinnitust. * Skript kopeerib kaustu rekursiivselt (leitud kaustad koos sisuga). * Kaustadest, mis ei ole failisüsteemi osa (nt Recycle Bin, Control Panel jne) ei saa otsida ega kopeerida. * Kui valida algkausta asukohaks mõni juurkaust ning teostada otsingut ka alakaustadest, võib otsing kesta väga kaua.
.EXAMPLE
C:\PS>.\skript.ps1 Käivitamisel pole eraldi võtmeid vaja kuna skript küsib ning informeerib toimingutest graafilises liideses.
.NOTES
Autor: Teet Saar - õpperühm A22 Versioon: 1.0 Muutmise kuupäev: aprill 2012. a.
.LINK (kasutatud materjalid)
* http://powershell.com/cs/media/p/627.aspx - alg/sihtkausta valimise dialoogi funktsioon. * http://powershell.com/cs/media/p/386.aspx - otsingutermini sisestamise aken. * http://bartdesmet.net/blogs/bart/archive/2006/09/16/4429.aspx - lihtne tagasiside aken.
- >
function Select-Folder ($message='Vali kaust:', $path = 0) {
$object = New-Object -comObject Shell.Application $folder = $object.BrowseForFolder(0, $message, 0, $path) if ($folder -ne $null) { $folder.self.Path } }
function kopeeri { foreach ($fail in $array) {
if ((Test-Path ($dir + $fail) -pathtype container) -eq $True) { robocopy ($dir + $fail) ($loc) /e | out-null; } else { robocopy ($dir + $fail) ($loc) | out-null; } }
}
$dir = Select-Folder; if ($dir -like ('*' + '::{'+ '*')) { [System.Windows.Forms.MessageBox]::Show("Valitud asukohast ei saa otsida") exit; } if ($dir -like ('*' + '\')) { } else { $dir = ($dir + '\'); } if (!$dir) { exit; }
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') $file = [Microsoft.VisualBasic.Interaction]::InputBox("Sisesta otsitav failinimi", "Otsingupäring") if (!$file) { exit; }
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') $result = [Microsoft.VisualBasic.Interaction]::MsgBox( `
("Kas soovid otsida ka alakaustadest"), 'YesNo,Question', "")
switch ($result) {
'Yes' { $array = get-childitem -recurse -name -filter ('*' + $file + '*') -path $dir; } 'No' { $array = get-childitem -name -filter ('*' + $file + '*') -path $dir; }
}
[void][System.Reflection.Assembly]::LoadWithPartialName('Microsoft.VisualBasic') $result = [Microsoft.VisualBasic.Interaction]::MsgBox( `
("Kas soovid faile kopeerida: " + $array), 'YesNo,Question', "")
switch ($result) {
'Yes' { $loc = Select-Folder; if ($loc -like ('*' + '::{'+ '*')) { [System.Windows.Forms.MessageBox]::Show("Valitud sihtkohta ei saa kopeerida") exit; } if ($loc -like ('*' + '\')) { $loc = $loc; } else { $loc = ($loc + '\'); } if (!$loc) { exit; } kopeeri; [System.Windows.Forms.MessageBox]::Show("Failid on kopeeritud") } 'No' { [System.Windows.Forms.MessageBox]::Show("Faile ei kopeeritud") exit; }
}