Home > Powershell, Tips, Windows > [PL] Zarządzanie komputerem z poziomu linii poleceń

[PL] Zarządzanie komputerem z poziomu linii poleceń

Pod tą nazwą 27 maja 2010 poprowadziłem spotkanie w ramach VIII Bałtyckiego Festiwalu Nauki na Uniwersytecie Gdańskim. Spotkanie otwarte, dostępne praktycznie dla wszystkich skierowane było głównie dla młodzieży z liceum i dorosłych. Celem spotkania było przedstawienie, w jaki inny sposób można zarządzać komputerem. W tym poście odnosząc się pośrednio do tego spotkania chciałbym przedstawić pewne elementy znanej większości tak zwanej ‘konsoli’ i pokazać w jaki fajny sposób można zarządzać komputerem.

W pierwszej części spotkania przedstawiłem krótką historię komputerów, a dokładniej sposób zarządzania nim. Z początku system dla użytkownika witał się przy pomocy czarnego okienka ze znakiem zachęty (tak zwanym promptem), w którym wpisywał odpowiednie polecenie. Z czasem znak zachęty zamieniał się w myszkę i w pełni graficzny ekran powitalny, w którym użytkownik ‘ograniczony’ był jedynie do wykonania paru kliknięć. W każdej chwili mógł wywołać wiersz polecenia i wpisywać w nim różnego rodzaju polecenia. W czasach DOSa znane były pliki z rozszerzeniem .bat, które zawierały pewien skrypt automatyzujący różnego rodzaju funkcje. Skrypty pisane były głównie przez administratorów i służyły jedynie pomocy w wykonywaniu różnego rodzaju monotonnej pracy.

Nie ukrywam, że powłoka DOSa była dla mnie na początku czymś ciekawym i magicznym. Otrzymując (dosyć późno) swój komputer Commodore 20 z systemem DOS w wersji chyba 2.0 i z wirusem Pong, mogłem wykonywać jedynie kilka funkcji i nic więcej. Później poznając tajniki pisania skryptów byłem w stanie napisać parę skryptów, które z dzisiejszego punktu widzenia robiły nic. Przerzucając się po paru latach na konsolę Linuxa, pierwszym wrażeniem była potęga i możliwości wykonywania poleceń z ‘czarnego okienka’. Byłem pod wielkim wrażeniem mogąc tworzyć i zarządzać komputerem, praktycznie bez użycia myszki. Jednak z biegiem czasu oprócz zarządzania zajmowałem się także naprawą i konfiguracją systemu spod znaku pingwinka, który po pół roku zmienił się (pojawiła się nowa dystrybucja).

Powracając do Windowsa i próbując użyć linii poleceń nie byłem w stanie wykonywać żadnej ciekawej funkcjonalności – owszem mogłem napisać jakiś skrypt w VB, ale po co. Do czasu gdy zobaczyłem PowerShella zmieniłem zdanie. Jest to zupełnie inne podejście do konsoli zaproponowane przez Microsoft. Wiele rzeczy urzekło mnie swą prostotą i ‘podobieństwem’ do konsoli basha. Pokrótce postaram się opisać co podoba mi się w nim najbardziej.

Obiektowość

– cecha, która mimo wszystko bardzo może się przydać. Znane wszystkim polecenie ‘dir’, które nie jest tym samym poleceniem co w starej konsoli Windows nie zwraca danych ‘binarnych’, czyli czystego tekstu, a jedynie dane w postaci obiektowej. Każdy wylistowany plik zwrócony jest w postaci obiektu z podstawowymi właściwościami. Zamiast wykonywać polecenie ‘dir’ możemy wykonać polecenie ‘ls’ znane użytkownikom Linuksa. Oba polecenia są aliasami (czyli skrótami, etykietami) do oryginalnego polecenia get-childitem. Chcąc dowiedzieć się, jakie właściwości czy też co zwraca nam dane polecenie możemy wykonań poniższe polecenie

ls | gm

dzięki temu dowiemy się np. że pojedynczy plik posiada takie informacje jak nazwa (Name), długość (Length) i wiele więcej. ‘Stare’ natywne polecenia typu ping zwracają nam po prostu typ String.

Oparte na .NET Framework

A co wiąże się z tym, mamy dostęp do każdego obiektu, klasy, która dostępna jest w .NET. Przykładowo możemy odwołać się do np. obiektu DateTime.Now w następujący sposób

[DateTime]::Now

Skryptowanie

Stało się już miłe w użyciu. Znając podstawy basha czy też języków skryptowych takich jak PHP, czy też składnie języków opartych o C, z łatwością utworzymy skrypty powershella. Co więcej mamy możliwość debugowania w najnowszym PS 2.0 nie jest to trudne.

Pozostałe

Nie jestem w stanie wypisać wszystkich elementów i cech PowerShella, warto poćwiczyć sobie z nim samemu. Kto zna jakieś polecenia z pingwinowego basha może spróbować polecenia w PowerShellu. Dodatkowo pisząc polecenia warto używać przycisku [TAB], który podpowie nam jakie dostępne są funkcje, a dodatkowo użyć polecenia man.

Do czego wykorzystać

Z pewnością narzędzie to może przydać się administratorom do tworzenia użytkowników, do zdalnego logowania się i wykonywania poleceń. Dla zwykłego użytkownika (który wie coś więcej, niż jak otworzyć FireFoxa, czy IE), PowerShell może przydać się do automatyzowania jakichś funkcji. Przykładowo ostatnio w moim aparacie wykasowane zostały zdjęcia (błąd karty), ale na szczęście udało mi się je odzyskać. Część zdjęć, przed błędem zapisałem na dysk i pozostawiłem na karcie, ale dodatkowo wykonane zdjęcia przepadły (było ich ponad 250).  Szczęśliwym trafem udało mi się je odzyskać i zapisać na dysk, problem był jednak taki, że narzędzie, które użyłem (i które było darmowe i legalne :) ) zapisało mi na dysk nowy plik z nazwą np.: “_MG_2010.jpg”. Nie chciało mi się szukać ręcznie i porównywać tych zdjęć ‘ręcznie’, dlatego skopiowałem te odzyskane zdjęcia i wrzuciłem je do katalogu ze zdjęciami, które udało mi się zapisać przed tą awarią. Kolejnym krokiem było utworzenie skryptu, który tą całą czarną robotę zrobił za mnie.

$files = $(ls *jpg)

foreach ($file in $files) {
	if ($file.Name.StartsWith("_")) {
		$newName = "I" + $file.Name.SubString(1);
		if (test-path -path $newName) {
			write-host -ForegroundColor red "Istnieje: " $newName;
			rm $file.Name
		} else {
			write-host -ForegroundColor green "Zmieniam: " $newName;
			ren $file.Name $newName
		}
	} else {
		write-host -ForegroundColor yellow "Pomijam: " $newName;
	}
}

W pierwszej kolejności ładuję wszystkie pliki z katalogu, w którym znajdują się zdjęcia. Następnie operuję jedynie na zdjęciach, które zaczynają się ze znakiem ‘_’. W kolejnym kroku usuwam ten znak i zamieniam go na literę ‘I’, dzięki czemu otrzymuję poprawną nazwę pliku. Następnie sprawdzam, czy taki plik istnieje. Jeżeli ten plik istnieje, to usuwam plik, który ma w nazwie znak ‘_’, a w przeciwnym razie zmieniam nazwę na poprawną. Dla informacji, jeszcze każdy krok wyświetlam na ekranie z odpowiednim kolorem: żółtym, jeżeli plik poprawnie się nazywa w katalogu, czerwonym – kiedy plik usuwam i zielonym, kiedy zamieniam jego nazwę.

Tego typu operacje można wykonywać także do wyszukiwania i usuwania duplikatów plików (np. Mp3, JPG czy też .docx) bez używania jakichś programów, czy pisania swojego programu w języku wyższym takim jak Java czy też C#. Każdy może pomyśleć sobie, przecież mam Perla, czy też Pythona czy jeszcze jakiś inny skrpytowy język i w nim mogę zrobić to samo. Odpowiedź jest prosta: możesz, nikt Tobie tego nie nakazuje, jednak w systemie masz już dostępne takie narzędzie i idąc do kolegi nie musisz martwić się czy mówić, że ma zainstalować język skryptowy XYZ.

Jak zainstalować

Domyślnie PowerShell jest już dostępny pod Windows 7, we wcześniejszych wersjach Windows należy go doinstalować. Z tego co się orientuję, to dostępny jest jedynie od WindowsXP.

Linki

Blog – http://blogs.msdn.com/b/powershell/
http://powershell.com/
Skrypty – http://technet.microsoft.com/en-us/scriptcenter/powershell.aspx
http://pshscripts.blogspot.com/
Prezentacja z BFN – http://cid-e2eed297c7a63060.skydrive.live.com/self.aspx/Studia/BFN/BFN%202010/Zarz%c4%85dzanie%20komputerem.pptx

  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: