Oto zadanie: mamy plik, który chcemy komuś przesłać przez Internet i mieć przy tym jak najmniej zawracania głowy. Jest oczywiście e-mail, są komunikatory, podprotokół IRC-a o nazwie DCC serwisy typu RapidShare, itd. Każdy z tych sposobów wymaga jednak albo wymiany jakichś informacji typu adres czy numer identyfikacyjny, albo nie zawsze chce działać w różnych konfiguracjach sieci (zwłaszcza gdy jedna ze stron jest ukryta za NAT-em), albo… wymaga wpatrywania się w literki celem odróżnienia psów od kotów :)
Jeśli jednak dysponujemy serwerem FTP z zawartością dostępną przez HTTP (czyli po prostu hostingiem strony WWW), to możemy dzielić się plikami w prostszy i szybszy sposób. W tym celu posłużyć się można odpowiednim skryptem w PowerShellu, który potrafi samodzielnie połączyć się z serwerem FTP i wgrać na niego podany plik, a potem zwrócić jego URL. Następnie możemy przekazać go osobie, której chcemy przekazać plik.
Całkiem zmyślnie, prawda? Wystarczy jedynie odczytać lokalny plik, a następnie użyć .NET-owej klasy System.Net.FtpWebRequest
w celu wykonania “żądania FTP” w postaci uploadu tegoż pliku na serwer.
Co jednak zrobić z takim skryptem, aby był użyteczny?… Jako że jego parametrem jest ścieżka do lokalnego pliku, który chcemy załadować, możemy użyć następującej komendy:
w celu jego wywołania – o ile potrafimy sprawić, by system Windows zamienił nam symbol zastępczy %1
na rzeczoną ścieżkę. Jest to możliwe przynajmniej na dwa sposoby:
SendTo
, zawierający powyższą komendę, i nazwać go odpowiednio intuicyjnie. Po odświeżeniu Eksploratora, we wspomnianym menu pojawi się nowa pozycja, której wybór uruchomi nam nasz skrypt dla wybranego pliku.HKEY_CLASSES_ROOT/*/shell
. Tworzymy tam nowy podklucz, nazywając go jakoś odpowiednio (np. upload
) i wpisując jako wartość domyślną tekst polecenia, który chcemy zobaczyć w menu (np. Upload). Następnie tworzymy tam podklucz command
, ustawiając jego wartość domyślną na polecenia uruchomienia skryptu. Odświeżamy Eksplorator i mamy już nowe polecenie w menu kontekstowym.Sprytne i wygodne. I kto teraz powie, że tylko w systemach linuksowych można bezustannie kombinować, by dostosowywać je do swoich potrzeb ;-)
PS. Użyty w skrypcie program clip jest bardzo prosty: kopiuje on po prostu swoje wejście do Schowka. Niestety, to malutkie narzędzie nie jest obecne w Windows XP. Nie ma tam więc prostego sposobu na wpisanie tekstu do Schowka z poziomu PowerShella. Alternatywą jest wypisanie URLa- do załadowanego pliku bezpośrednio w oknie konsoli PSh. Wystarczy po prostu zmienić clip
na Out-Host
, a także zmienić wywołanie skryptu, dodając parametr -NoExit
:
To sprawi, że o wykonaniu operacji konsola PowerShella pozostanie otwarta wraz z wypisanym w niej URL-em, który można z niej skopiować.
Fajny sposób, swego czasu zrobiłem mały programik podobny do screenupa, który wysyła pliki na podany wcześniej serwer. (kliknij w nick :P). Najlepiej działa z serwerami republiki, które można szybko założyć. (polecam zaznaczenie opcji nie sprawdzaj miejsca, ponieważ za za każdym razem oblicza zajęte miejsce).
A ja pod wpływem twojego posta napisałem swój program do uploadowania :)
http://mt-z.ovh.org/?p=12
Po przestudiowaniu tej notki (w ramach nauki ofc :D) znalazłem błąd:
powershell -Command . “C:\Sciezka\Do\Skryptu\Send.ps1” “%1″
powinno być
powershell -Command . ‘C:\Sciezka\Do\Skryptu\Send.ps1’ ‘%1’
ponieważ Powershell zawartość między ” oznacza jako cały string a w “” dochodzi do spacji.
niestety FTP w trybie aktywnym tez nie jest odporny na prace za natem.