Skocz do zawartości

Windows PowerShell - Wprowadzenie i materiały edukacyjne


Rekomendowane odpowiedzi

PowerShell_5.0_icon.png
PowerShell


Wyłożyłem tu takie małe rozwinięcie, to jest jedna setna możliwości. Sam PowerShell w wersji 1.0 posiada 128 cmdletów, gotowe polecenia oraz praca w klasach WMI, których będzie około 1000szt, praca na obiektach NET oraz COM. XP PRO posiada tylko konsole WMIC. W standardzie niby miała mieć to Vista, ale nie ma i sam nie wiem czy to były pogłoski czy nie. W dziale pobrań Microsoft pojawiła się wesja CTP2 nowej odsłony powłoki skryptowej. Na razie jest to wersja przedpremierowa, oferująca 51 cmdletów więcej. Więcej na WSS.pl
PowerShell wymaga zainstalowanego .NET Framework 2.0. Jeśli chcesz mieć od razu z powłoką obiektową, to musisz zainstalować .NET Framework 3.0.



MATERIAŁY I LITERATURA:

Przykładowe skrypty i dokumentacje:

Książki:

BLOGI POWERSHELL

Przykłady, skrypty, publikacje, programy, pomoc:

Na polskich stronach:

SKRYPTY VBS I ZESTAWY NARZĘDZI

Skrypty vbs, Centrum skryptów w Twoim komputerze, narzędzia:

Narzędzia:

Odnośnik do komentarza
Pomoc jest darmowa, ale proszę rozważ przekazanie dotacji na utrzymanie serwisu: klik.

URUCHAMIANIE SKRYPTÓW:

 

PowerShell po instalacji jest gotowy do pracy. Skrypty mozna wklejać bezposrednio do okna PS, ale można je zapisać w pliku. Otwieramy notatnik wklejamy interesujący nas skrypt i zapisujemy z rozszerzeniem ps1 czyli MójSkrypt.ps1.

 

Jednak uruchamianie skrytów z pliku zaraz po instalacji PS jest ograniczona, mianowicie nie uruchomimy skryptu z innej lokalizacji gdyż konfiguracja jest obłozona sankcją RESTRICTED (ograniczony) - skrypty nie zostaną uruchomione. Aby zobaczyć jaką posiadamy sankcje należy użyć polecenia:

 

Set-ExecutionPolicy - zmienia restrykcje uruchamiania skryptów.

Get-ExecutionPolicy - zaraz wyświetli stan i najprawdopodobniej będzie to restricted. Właściwości:

restricted -ograniczony

AllSigned - wszytskie podpisane od zaufanego wydawcy

RemonteSigned - Zdalnie podpisane. Taki skrypt będzie pytał o pozwolenie przed uruchomieniem

unrestricted - nieograniczony. Wszytskie skrypty będą wykonane.

 

Więc jeśli chcemy zmieć sankcje to wracamy do polecenia:

Set-ExecutionPolicy unrestricted (dostęp nieograniczony)

Wracamy do polecenia Get-ExecutionPolicy dajemy enter i sprawdzmy czy sankcja została zmieniona.

 

Każdy trzyma gdzie chce własne skrypty, ja bym proponował stworzyć własny folder na C w katalogu WINDOWS. W konsoli

skrypt odpalamy wpisując ścieżke : C:\WINDOWS\MyScript\Skrypt.ps1, żeby umilic sobie prace i za każdym razem nie wpisywac pełnej ścieżki wystarczy tak jak i wierszu polecenia użyć strzałek góra-dół. Program zapamiętuje ostatnio wpisane polecenia. Jest polecenie get-history, gdzie można wyświetlić każdy ruch w konsoli podczas pojedynczej sesji oraz ustawić ilość zapamietanych poleceń także w przypadku pojedynczej sesji.

 

 

Uruchamianie skryptów spoza konsoli, ale w konsoli. Aby uruchomić jeszcze inaczej skrypt z innej lokalizacji w uruchom należy wpisać:

PowerShell.exe -noexit D:\Skrypty\MójSkrypt.ps -, wartośc noexit by konsola po wykonaniu skryptu nie została zamknieta.

Odnośnik do komentarza

52650023pi8.jpg

A jak w PowerShellu. Na przykładzie procesów. Jak mówiłem wcześniej klasa Win32_process korzysta z WMI - mangament instrumentation.

W PowerShellu zamiast PATH wpisujemy:

Get-WmiObject Win32_process - od razu będzie wykaz wszytskich procesów załadowanych w systemie - lista będzie dość spora. Ale żeby wyświetlić właściwości tej klasy. Jak można filtrowac dane, jakie są dostepne dane i jakie czynności możemy wykonać nalezy użyć:

Get-WmiObject Win32_process | Get-Member. Sama konsola ma wbudowane polecenie Get-Process i właśnie te polecenie jest oparte na obiektach NET z taką różnicą że danych do uzyskania jest więcej z czym idzie więcej mozliwości. aby wyświetlić właściwości nalezy użyć Get-Process | Get-Member

 

 

OPERACJE NA PROCESACH:

 

 

Wracając do tematu procesów. Może zaczne od modulów czyli dll, których używa konkretny proces. Możemy użyć systemowej komendy Tasklist /m. Albo doskonałe ListDlls:

 

LINK1

LINK2

 

dllxy9.th.png

 

Narzędzie list modules ma to do siebie że wypisze tylko moduły interesującego nas procesu, uzycie z lini wiersza polecenia:

 

listmodules PID

 

moduldb0.th.gif

 

 

Mamy spis bibliotek uzywanych przez konkretny proces, aby zasiegnąć szczegółowej informacji na temat wybranej przez nas biblioteki warto użyć narzędzia FILEVER dostepne z zestawu Support Tools. Działa z lini wiersza poleceń:

 

fileversr5.th.png

 

Aby uzyskać informacje na temat interesującej nas biblioteki nalezy wpisać ścieżke:

 

Filever/v "C:\WINDOWS\System32\Nazwa.dll"

 

Narzędzia bardzo dobre, swego czasu jedyne. Ale jeśli mamy konsole PS stają sie one zastępowe, pomocnicze.

Na początek wylistujmy Get-process | Format-table name, Company, StartTime, MainWindowTitle

czyli nazwa procesu, wydawca procesu - lub nazwa firmy, Czas startu procesu oraz tytuł okienek:

 

titledw6.th.png

 

Przefiltrujmy tak, aby wyświetlony został proces gadu-gadu:

Get-process gg | Format-list name, Company, StartTime, MainWindowTitle

 

Wylistowane procesów w postaci grupowej do którego wydawcy należą:

get-process | group-object -property company -noelement

 

Podobne wylistowanie, ale dane zostaną wyświetlone jedne pod drugim w grupach:

get-process | sort company | format-Table ProcessName -groupby company

 

Podobny przykład co do pierwszego. Wyświetlanie w grupach, ale z wyświetleniem nazwy procesu:

get-process | group-object company | sort-object count -descending

 

Wyświetlenie podstawowych informacji na temat procesu gg:

Get-Process gg

 

Wyświetlenie wybranych przez nas właściwości procesu gg:

get-process alg | format-table name, Id, cpu, company, basepriority -autosize

 

Wyświetlenie ile czasu mineło od uruchomienia aplikacji gg:

$u=(get-date).Subtract((Get-Process GG).starttime);Write-Host $u.Days dni $u.hours godzin $u.minutes minut $u.seconds sekund

 

Wyświetlenie ile czasu mineło od uruchomienia wszystkich procesów:

 

function get-uptimeprocess
{
foreach ($proc in (Get-Process | where {$_.name -ne "Idle" -AND $_.name -ne "System"})) {
$u=(get-date).Subtract($proc.starttime);
Write-Host $proc.name `t $u.Days dni $u.hours godzin $u.minutes minut  $u.seconds sekund
}} 
get-uptimeprocess

 

Wyświetlenie nazwy procesów oraz data uruchomienia w postaci nazwy dnia:

get-process | select-object ProcessName, @{Name="Start Day"; Expression = {$_.StartTime.DayOfWeek}}

 

Przefiltrowanie procesów tak, aby wyświetlał procesy według wpisania Firmy, Dostawcy!! W tym przypadku wyświetli wszytskie procesy Microsoft:

get-process | where-object {$_.Company -match ".*Microsoft*"} | format-table Name, ID, Path -Autosize

 

Wyświetlenie modułów - bibliotek, których używa konkrenty process. W tym przypadku gg:

 

modyz5.th.png

 

(Get-Process gg).Modules | Format-Table

 

lub

 

get-process gg | foreach {$_.modules}

 

Wyświetlenie ilości modułów używanych przez process w postaci liczbowej:

(Get-Process gg).Modules.Count

 

Wyświetlenie danych szczegółowych bibliotek, które używa dany process:

 

algny4.th.png

 

get-process alg| select-object processname -expandproperty modules |format-list

 

 

Wyświetlenie odwrotne. Skrypt wyświetli przez wybraną przez nas biblioteke - ile procesów danej biblioteki używa.

 

 

 

get-process | select processname -expand Modules -ea SilentlyContinue | where {$_.ModuleName -like "rasman.dll"} |

group {$_.ModuleName} | format-table

 

 

Skrypt gdzieś znalazłem na necie. Wyświetlający zależności pod jakimi procesami działają usługi systemowe:

 

function plist([string]$name="*")
{

$Svc = get-wmiobject win32_service | sort ProcessId|group-object ProcessId 
$ps = @(get-process $name | sort Id) 
$i=0
$j=0
while($i -lt $ps.count -and $j -lt $svc.count)
{ 

if($ps[$i].Id -lt $Svc[$j].Name)
  { 

 $i++;
 continue;
  }
if($ps[$i].id -gt $svc[$j].Name)
  {
 $j++;
 continue;
  }
 if($ps[$i].id -eq $svc[$j].Name)
  {
 $ps[$i]| add-member NoteProperty service $Svc[$j].group;
 $i++;
 $j++;
  }
}
$ps;
}

 

Teraz wpisujemy:

 

Aby zobaczyć Svchosty:

plist svchost* | ft name,Id,service -autosize

 

Aby wyświetlić wszystkie procesy:

plist | ft name,Id,service -autosize

 

plistscripten3gx2.th.gif

 

 

Klass WMI w systemie jest prawie 1000szt. Można przejrzeć prawie każdą śrubke systemu, aby wylistować klasy WMI nalezy wpisać:

 

Get-WmiObject -list

 

wmisf9.th.png

 

 

 

Napisałem skrypt, który sotruje pod względem wielkości priorytetu przez dany process oraz najwyższy i posredni priorytet jest odznaczony kolorem czerwonym:

priorytet niski - do 9 kolor biały

priorytet średni i wysoki od 10 do 13 - czerowny

 

 

$strComputer = "."
$colItems = get-wmiobject -class "Win32_Process" -namespace "root\CIMV2"`
-computername $strComputer | write-output | sort -descending "Priority"
foreach ($objItem in $colItems) {
  if ($objItem.Priority -gt 9) {
  write-host  $objItem.Name, $objItem.Priority -foregroundcolor "red" }
 else {write-host  $objItem.Name, $objItem.Priority}
}

Odnośnik do komentarza

LISTOWANIE STEROWNIKÓW I PROCESÓW

 

 

Napisałem prosty skrypt, który wypisze wykaz sterowników systemowych, uruchomionych w systemie (posortowany kolorem) wraz z trybem uruchamiania się w systemie (System, Boot,Auto, Diasbled, Manual) z kolorowym sortem. Z końcową statystyką trybu sterowników, stanem sterowników, sumą i statusem:

 

 

write-host
write-host "Wyświetla status z trybem uruchamianych sterowników systemowych"
write-host "----------------------------------"
write-host
$strComputer = "."

$colItems = get-wmiobject -class "Win32_SystemDriver" -namespace "root\CIMV2" `
-computername $strComputer | write-output | sort -descending "State"

foreach ($objItem in $colItems) {
   if ($objItem.State -like "Running" ) {
	   write-host  $objItem.Name, $objItem.DisplayName,  $objItem.State  -foregroundcolor "green" }
   if ($objItem.State -like "Stopped") {
	   write-host  $objItem.Name, $objItem.DisplayName,  $objItem.State  -foregroundcolor "red" }
   if ($objItem.StartMode -like "Auto" ) {
	   write-host   $objItem.StartMode -foregroundcolor "green" }
   if ($objItem.StartMode -like "Disabled") {
	   write-host   $objItem.StartMode -foregroundcolor "red" }
   if ($objItem.StartMode -like "Manual") {
	   write-host  $objItem.StartMode -foregroundcolor "blue" }
   if ($objItem.StartMode -like "Boot") {
	   write-host   $objItem.StartMode -foregroundcolor "white" }
   if ($objItem.StartMode -like "System") {
	   write-host   $objItem.StartMode -foregroundcolor "magenta" }
   write-host
   write-host
}

write-host "Statystyka" 
write-host "--------------------"
get-wmiobject -Class Win32_SystemDriver |group-object startmode
write-host "Stan sterowników" 
write-host "--------------------"
get-wmiobject -Class Win32_SystemDriver |group-object state
write-host "Suma i status sterowników" 
write-host "--------------------"
get-wmiobject -Class Win32_SystemDriver |group-object status
write-host

 

Jeśli kogoś interesuje PowerShell to zamieszczam skrypick ShowListService do testowania. Gdzieś znalazłem demo tego skryptu, chyba z książki Monad i go rozpisałem. Skrypt wyświetla usługi systemowe. Sortując pełną nazwą usługi oraz sort kolorem:

Tryb Wyłączony - stan wyłączony - Czerwony

Tryb Auto - stan uruchomiony -zielony

Tryb Manualny - stan uruchomiony - Żółty

Tryb Manualny -stan wyłaczony - magenta

Mozna go dalej rozpisywać.

 

 

 

$uslugi=Get-wmiobject -class "Win32_service" |sort-object Displayname
foreach ($svc in $uslugi) {
if (($svc.startmode -like "Auto") -AND ($svc.state -like "Running")) {
 write-host $svc.displayname "["$svc.state"]" "["$svc.startmode"]" "["$svc.name"]" -foregroundcolor "green"
 }
else
 {
if (($svc.startmode -like "Disabled") -AND ($svc.state -like "Stopped")) {
 write-host $svc.displayname "["$svc.state"]" "["$svc.startmode"]" "["$svc.name"]"`
  -foregroundcolor "Red"
 }
else
 {
if (($svc.startmode -like "Manual") -AND ($svc.state -like "Stopped")) {
 write-host $svc.displayname "["$svc.state"]" "["$svc.startmode"]" "["$svc.name"]"`
  -foregroundcolor "Yellow"
 }
else
 {
if (($svc.startmode -like "Manual") -AND ($svc.state -like "running")) {
 write-host $svc.displayname "["$svc.state"]" "["$svc.startmode"]" "["$svc.name"]"`
  -foregroundcolor "magenta"}
	  } 
  }
  }
}

 

 

Uzupełnienie!!!

 

Jeśli ktoś woli inny sort niż jest taki tu zrobiony to w skypcie na samej górze w pierwszej lini :

$uslugi=Get-wmiobject -class "Win32_service" |sort-object DisplayName ------ na końu prawej strony musi zmienić właściwość w tym momencie sort jest po pełnej nazwie alfabetycznej(DisplayName), aby zmienić sort na aktualny stan uruchomienia serwisów czyli sort running-stopped wystarczy ze w lini dopisze zmieniając własciwość DisplayName na STATE:

$uslugi=Get-wmiobject -class "Win32_service" |sort-object STATE

Aby posortować skrypt sortem według trybu uruchamiania usług AUTO, MANUAL, STOPPED w lini musi dopisać:

$uslugi=Get-wmiobject -class "Win32_service" |sort-object STARTMODE, nie zmieni to dalej własciwości skryptu jedynie będzie inny sort.

 

servqq5.th.jpg

 

 

Jak już sie rozpisałem to jeszcze coś zamieszcze, kiedyś chodziłem po stronie M$, wszedłem na te strone:

http://www.microsoft.com/technet/scriptcen...msh/output.mspx

na samym dole strony jest skrypcik, który pokazuje liste procesów uruchomionych w systemie sortuje kolorem te procesy, które uzywają największą liczbę pamięci i tylko te. Lista procesów jest rożucona. Wygląda on tak:

 

$strComputer = "."

$colItems = get-wmiobject -class "Win32_Process" -namespace "root\CIMV2" `
-computername $strComputer | write-output
foreach ($objItem in $colItems) {
  if ($objItem.WorkingSetSize -gt 3000000) {
  write-host  $objItem.Name, $objItem.WorkingSetSize -foregroundcolor "magenta" }
 else {write-host  $objItem.Name, $objItem.WorkingSetSize}

 

Postanowiłem nieco zmienić, więc na podbudowie tego kodu napisałem coś podobnego, ale zupełnie innego. Skrypt ten sortuje na 3 sposoby:

Kolor czerwony - procesy które uzywają najwięcej pamęci

Kolor niebieski - procesy posrednie

Kolor magenta - procesy które uzywają najmniej pamięci

Do tego posotrowany od najwiekszej do najmniejszej wartości uzycia pamięci. KOD:

 

$strComputer = "."
$colItems = get-wmiobject -class "Win32_Process" -namespace "root\CIMV2" `
-computername $strComputer | write-output | sort -descending WorkingSetSize
foreach ($objItem in $colItems) {
  if ($objItem.WorkingSetSize -gt 9000000) {
  write-host  $objItem.Name, $objItem.WorkingSetSize -foregroundcolor "red" }
  elseif ($objItem.WorkingSetSize -gt 1000000) {
  write-host  $objItem.Name, $objItem.WorkingSetSize -foregroundcolor "blue" }
  elseif ($objItem.WorkingSetSize -lt 1000000) {
  write-host  $objItem.Name, $objItem.WorkingSetSize -foregroundcolor "magenta" }}

 

Wygląda to tak:

 

proc1cm6.th.jpg

Odnośnik do komentarza

DEFRAGMENTACJA:

 

 

Zastosowanie poleceń z wiersza polecenia w PowerShellu. Mamy idealny defragmentator zwany CONTIG, malutki, działa bez instalacji, doskonale defragmentuje, oczyszcza wolne miejsce, zresztą Picasso już o nim dawno pisała. Do pobrania z:

http://technet.microsoft.com/en-us/sysinte...s/bb897428.aspx

Wypakowac i wkleić na C do katalogu WINDOWS. Więc może zdefragmentujmy pliki startowe, zastosujmy contig, aby oczyścił wolne miejsce i posklejał rozszczepione pliki - wszytsko z podglądem, a na końcu uzyjmy systemowego defragmentatora zeby posklejał aplikacje. Tyczy się dysku C:

 

defrag C: -b; contig -s -v c:\*.*; defrag C:

 

Inaczej: Zapiszmy w notatniku nazwijmy MyDefrag.ps1

 

write-host "Defragmentacja plików startowych" -fore green
defrag C: -b
write-host "Defragmentacja Contig" -fore green
contig -s -v c:\*.*
write-host "Defragmentacja Systemowa" -fore green
defrag C:
write-host "Koniec działania" -fore green

 

To by było na tyle.

Odnośnik do komentarza

Jak odszukać i odczytać klasy WMI?

 

1. Start/ustawienia/panel sterowania/wydajność i konseracja/narzędzia administracyjne/zarządzanie komputerem/usługi i aplikacje/podswietlić - sterowanie usługą WMI - prawoklik, a tam właściwości - odwiedzić karte ZABEZPIECZENIA. Znajdują się w niej PRZESTRZENNE NAZWY WMI - otworzyć warste root. Każda nazwa jest pod konkrentne własciwości. Jednak najwięcej klass wmi posiada Root/CIMV2 -ok 918. Jak pisałem wczesniej mozna podejrzeć każdą srubke systemu.

 

Możemy wejść do konsoli WMIC i po kolei odkrywać klasy, a o to sposoby:

alias class -?

alias list brief

alias list system

alias get target /all

alias list full

alias list

alias list system /format:table

Czasami przy listach full powstaje jakiś błąd wewnetrzny i nie odkryje klass. Nie wiem czy to błąd u mnie tylko!!!!

 

 

2. Jeszcze inaczej! Tester oprzyrządowania instrumenracji zarządzania windows - WBEMTEST.exe - wpisać w uruchom.

Kliknąć POŁĄCZ, w tabelce wpisać nazwe root/cimv2 znowu w tej samej tabelce połącz. W głównej tabeli kliknać na WYLICZ KLASY, pojawi się podtabelka a wniej CYKLICZNIE i dać OK. Pojawią się wszytskie klasy z konkretnej nazwy przestrzeni klas. W tym przypadku - root/cimv2. Zauważymy że nie istnieją tylko klasy Win32_ ale i również CIM oraz inne, ale na razie nie będe o tym mówił. Wiem - sposób zakręcony odkrywania klas.

 

 

3. Ale jeśli masz konsole PowerShell zajmie to 5 sekund.

 

Aby wyświetlić Przestrzenie nazw WMI należy:

gwmi -class __Namespace -namespace root | fl name odkrywamy dalej. Pisałem wyżej o nazwie przestrzennej root/cimv2

więc wystarczy w kodzie dopisać:

gwmi -class __Namespace -namespace root/cimv2 | fl name - wysietli nazwy przestrzenne nalezące do cimv2

Aby wyświetlić listę dostawców WMI lista dostawców wmi należy:

gwmi -class __Provider -namespace $wmiNS | Sort-Object -property Name | format-list name

 

 

No to poznaliśmy już nazwy przestrzenne WMI

Więc odkrywamy same klasy jak pisałem poprzednio, aby wyświetlić wszystkie klasy należy:

Get-WmiObject -list , ale polecenie te wyświetli wszytskie klasy tylko należące do root/cimv2 no to odkrywamy:

 

get-WmiObject -namespace "root\directory\ldap" -list

get-WmiObject -namespace "root\cimv2" -list

get-WmiObject -namespace "root\Policy" -list

get-WmiObject -namespace "root\cimv2\ms_409" -list

get-WmiObject -namespace "root\directory\LDAP" -list

 

to nie wszystkie polecenia odkrywania klasy. Uzyjcie gwmi -class __Namespace -namespace root | fl name

jak pisałem wyżej i pozmieniajcie nazwy: get-WmiObject -namespace "root\TUTAJ" -list

 

 

4. Cóż jeśli ktoś nie ma PowerShell, a konsola WMIC sie nie podoba, to jeszcze zostają skrypty WMI. Działają bez instalacji niczego - no chyba ze systemu:D O skrytpach WMI nie będe sie rozpisywał bo nie poruszam się w nich dobrze,ale.....

 

 

SKRYPT WMI WYŚWIETLAJĄCY LISTĘ WSZYSTKICH KLAS W NAZWIE PRZESTRZENNEJ ROOT/CIMV2

 

strComputer = "."
Set objWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
strComputer & "\root\cimv2")

For Each objclass in objWMIService.SubclassesOf()
Wscript.Echo objClass.Path_.Class
Next

 

WKLEIĆ DO NOTATNIKA I ZAPISAĆ JAKO ROZSZERZENIE VBS np.. CImv2List.vbs

Skrypt wkleić do katalogu Windows. uruchamiamy go z wiersza polecenia za pomocą hosta skrytów........

CScript CImv2List.vbs

 

SKRYPT WYŚWIETLAJĄCY WSZYSTKIE NAZWY PRZESTRZENNE WMI

 

strComputer = "."

Set objWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
strComputer & "\root")

Set colNameSpaces = objWMIService.InstancesOf("__NAMESPACE")

For Each objNameSpace In colNameSpaces
WScript.Echo objNameSpace.Name
Next

 

SKRYPT WYŚWIETLAJĄCY WSZYSTKICH DOSTAWCÓW WMI

 

strComputer = "."

Set objWMIService=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _ 
strComputer & "\root\cimv2")

Set colWin32Providers = objWMIService.InstancesOf("__Win32Provider")

For Each objWin32Provider In colWin32Providers
WScript.Echo objWin32Provider.Name
Next

 

 

PS. Nie jest to wszytsko opisane szczegółowo jeśli chodzi o schemat działania dostawców, klas, nazw przestrzennych. Musiałbym wkleić cały laborat, a kto to będzie czytał. Mam nadzieje ze w miare wszytsko zrozumiale opisałem.

 

 

 

CD...........

 

Aby przefiltrować klasy i wyświetlić tylko klasy CIM należy:

Get-WmiObject -List | Where-object {$_.name -like "CIM*")

 

Jeżeli chcemy przefiltrować klasy tak, aby wyświetlały w nazwie własnej wybraną przez nas własciwość:

get-wmiobject -list | where {$_.name -match "System"} zostane wyświetlone klasy, które w nazwie posiadają rzeczownik system. Dalej......

 

get-wmiobject -list | where {$_.name -match "ip"}

get-wmiobject -list | where {$_.name -match "Memory"}

 

 

 

Cd...

Klasa Win32_Directory - reprezentuje pozycje katalogu w systemie komputerowym win32, który w logiczny sposób grupuje pliki danych znajdujące się w nim i dostarcza informacje o ścieżce dla zgrupowanych plików. Inaczej mówiąc wyświetli wszytskie foldery wraz z pełną ścieżką dostępu, w przykładzie....

Get-WmiObject Win32_directory | Format-table name

 

Skracanie lini poleceń:

GWMI to samo znaczy co Get-WmiObject

ft to samo znaczy co Format-table

Efekt:

GWMI Win32_directory | Ft name

 

Rodzaje formatowania:

Format-table -ft

Format-wide -fw

Format-custom -fc

Format-list -fl

 

CD....

Klasa Win32_PerfFormattedData_PerfNet_Redirector - reprezentuje obiekt wydajnośći readstator. Jest to wykaz liczników monitujących połączenia sieciowe mające początek w komputerze lokalnym. Przykład małego skryptu:

Get-WmiObject Win32_PerfFormattedData_PerfNet_Redirector | Select-Object * -excludeproperty "_*"

 

Klasa Win32_StartupCommand - reprezentuje automatyczne uruchamianie aplikacji podczas logowania się użydkownika w systemie. Mały przykład:

Get-WmiObject Win32_StartupCommand |fl command, user, caption, location

 

Klasa Win32_NetworkProtocol - reprezentuje protokół i jego charakterystyke sieciową. Przykłąd z wyświetleniem właściwości obiektu:

Get-WmiObject Win32_NetworkProtocol | Get-Member

 

Klasa Win32_IP4RouteTable - określa gdzie są rozsyłane pakiety danych - tablica routingu. Przykład:

Get-WmiObject Win32_IP4RouteTable |fl Age, Caption, Description, Destination, Information, InstallDate, InterfaceIndex, Metric1, Metric2, Metric3, Metric4, Metric5, Name, NextHop, Protocol, Status, Type

 

Get-WmiHelp

Na tej stronie http://powershelllive.com/blogs/lunch/rss....p&AndTags=1 pewien pan Dr. Tobias Weltner udostępnił skrypt pomocy dla klass WMI. Odczytać nim można co dana klasa reprezentuje, opis klasy, właściwości klasy. Zastosowanie:

Get-WmiHelp Win32_PageFile

Get-WmiHelp Win32_OperatingSystem

Skrypt Get-WmiHelp można pobrać na samym dole strony.

 

Wyświetlanie serwisów z obiektu NET:

 

Skrypt, który posortuje kolorem aktualny stan usług - uruchomione, wyłączone:

 

Get-Service | 
  ForEach-Object`
  {if ($_.Status -eq "stopped")
		{Write-Host $_.Displayname, $_.Status -foregroundcolor red }
  elseif ($_.Status -eq "running")
		{Write-Host $_.Displayname, $_.Status -foregroundcolor green }}

 

Skrypt, który posortuje w oddzielnych tablicach właściwości stopped - running, poda nazwe skrótową usługi oraz pełną nazwe i stan:

 

get-Service | sort-Object status | format-Table -groupby status Name, DisplayName, Status

Odnośnik do komentarza

TRYB STARTOWANIA STEROWNIKÓW

 

 

Dzień dobry po przerwie. Wiosna przyszła, ptaszki mi ćwierkają i trawa urosła. Napisałem kilka rzeczy na podbudowie wyżej wymienionych zagadnień. Mowa będzie sterownikach systemowych i ich trybie startowania.

 

1. Skrypt, który sortuje kolorem tryb uruchamiania steroników systemowych, ale z takim sortem:

 

- posortowane własciwości (auto, disabled, manual,boot, system) Sort sprowadza się tak:

 

tryb auto - stan auto - zielony

tryb disabled - stan disabled - czerowny

tryb diasbled - stan running - taki taki wyblakły niebieski

tryb manual - stan running - żółty

tryb manual - stan stopped - magenta - taki różowaty

tryb boot - stan running - niebieski

tryb system - stan stopped - biały

tryb system - stan running - zielonkawy

 

Wygląda to tak:

 

startmodehd5.th.gif

 

Kod skryptu:

 

$sterowniki=Get-wmiobject -class "Win32_SystemDriver" | sort-Object StartMode
foreach ($svc in $sterowniki) {
if (($svc.startmode -like "Auto") -AND ($svc.state -like "running")) {
 write-host $svc.displayname "<"$svc.state">" "["$svc.startmode"]" "["$svc.name"]"  -foregroundcolor "green"
}
else
 {
if (($svc.startmode -like "Disabled") -AND ($svc.state -like "running")) {
 write-host $svc.displayname "<"$svc.state">" "["$svc.startmode"]" "["$svc.name"]"`
  -foregroundcolor "Cyan"
 }
else
 {
if (($svc.startmode -like "Disabled") -AND ($svc.state -like "stopped")) {
 write-host $svc.displayname "<"$svc.state">" "["$svc.startmode"]" "["$svc.name"]"`
  -foregroundcolor "Red"
 }
else
 {
if (($svc.startmode -like "Manual") -AND ($svc.state -like "running")) {
 write-host $svc.displayname "<"$svc.state">" "["$svc.startmode"]" "["$svc.name"]"`
  -foregroundcolor "Yellow"
 }
else
 {
if (($svc.startmode -like "Manual") -AND ($svc.state -like "stopped")) {
 write-host $svc.displayname "<"$svc.state">" "["$svc.startmode"]" "["$svc.name"]"`
  -foregroundcolor "magenta"
 }
else
 {
if (($svc.startmode -like "boot") -AND ($svc.state -like "running")) {
 write-host $svc.displayname "<"$svc.state">" "["$svc.startmode"]" "["$svc.name"]"`
  -foregroundcolor "blue"
 }
else
 {
if (($svc.startmode -like "System") -AND ($svc.state -like "stopped")) {
 write-host $svc.displayname "<"$svc.state">" "["$svc.startmode"]" "["$svc.name"]"`
  -foregroundcolor "white"
 }
else
 {
if (($svc.startmode -like "System") -AND ($svc.state -like "running")) {
 write-host $svc.displayname "<"$svc.state">" "["$svc.startmode"]" "["$svc.name"]"`
  -foregroundcolor "gray"
 }
}
}}}}}}}

 

 

Jeśli ktoś woli inny sort niż Tryb uruchamiania, a woli uporządkowane alfabetycznie to zaraz w pierwszej lini kodu po prawej stronie zmienić własciwości StartMode na Name.

 

$sterowniki=Get-wmiobject -class "Win32_SystemDriver" | sort-Object (name)

 

Wygląda to tak:

 

startmodenamecy2.th.gif

 

Skrypt jako pierwsze w lini wyświetla pełna nazwe sterownika, Aktualny stan, Tryb uruchamiania, nazwe skrótową.

 

 

Nastepna wariacja skryptu. Wyświetla tylko posortowany stan uruchamiania sterowników systemowych.

Tryb auto - zielony

Tryb diabled - czerwony

Tryb manual - niebieski

Tryb boot - biały

Tryb system - różowaty

W pierwszej kolejności wyświetla się tryb uruchamiania, pózniej pełna nazwa sterownika, aktualny stan sterownika

Formatowanie jest bardziej czytelne wizualnie i estetyczniejsze, wygląda to tak:

 

startmode2bw8.th.gif

 

 

Kod skryptu:

 

$strComputer = "."
$colItems = get-wmiobject -class "Win32_SystemDriver" -namespace "root\CIMV2" `
-computername $strComputer | select-object StartMode, Name, DisplayName, State | sort -descending "StartMode"
foreach ($objItem in $colItems) {
if ($objItem.StartMode -like "Auto" ) {
write-host $objItem.StartMode, $objItem.Name, $objItem.DisplayName, $objItem.State -foregroundcolor "green" }
if ($objItem.StartMode -like "Disabled") {
write-host $objItem.StartMode, $objItem.Name, $objItem.DisplayName, $objItem.State -foregroundcolor "red" }
if ($objItem.StartMode -like "Manual") {
write-host $objItem.StartMode, $objItem.Name, $objItem.DisplayName, $objItem.State -foregroundcolor "blue" }
if ($objItem.StartMode -like "Boot") {
write-host $objItem.StartMode, $objItem.Name, $objItem.DisplayName, $objItem.State -foregroundcolor "white" }
if ($objItem.StartMode -like "System") {
write-host $objItem.StartMode, $objItem.Name, $objItem.DisplayName, $objItem.State -foregroundcolor "magenta"}
write-host
}

 

Kolejna wariacja to jest ten sam skrypt wyżej opisany, ale z tą różnicą ze wyświetla dane oddzielone od siebie separatorem. Wygląda to tak:

 

startmode3fg0.th.gif

 

 

Kod skryptu:

 

$strComputer = "."
$colItems = get-wmiobject -class "Win32_SystemDriver" -namespace "root\CIMV2" `
-computername $strComputer  | sort -descending "name"
foreach ($objItem in $colItems) {
if ($objItem.StartMode -like "Auto" ) {
write-host $objItem.DisplayName, $objItem.StartMode, $objItem.Name, $objItem.State -foregroundcolor "green" -separator ">`n`t"}
if ($objItem.StartMode -like "Disabled") {
write-host $objItem.DisplayName, $objItem.StartMode, $objItem.Name, $objItem.State -foregroundcolor "red" -separator ">`n`t"}
if ($objItem.StartMode -like "Manual") {
write-host $objItem.DisplayName, $objItem.StartMode, $objItem.Name, $objItem.State -foregroundcolor "blue" -separator ">`n`t"}
if ($objItem.StartMode -like "Boot") {
write-host $objItem.DisplayName, $objItem.StartMode, $objItem.Name, $objItem.State -foregroundcolor "white" -separator ">`n`t"}
if ($objItem.StartMode -like "System") {
write-host $objItem.DisplayName, $objItem.StartMode, $objItem.Name, $objItem.State -foregroundcolor "magenta" -separator ">`n`t"}
write-host
}

 

 

Dobrym narzedziem wyświetlającym stan sterowników jest LoadOrder z Sysinternals. Malutki, działa bez instalacji. ładny interfejs graficzny.

 

Formatowanie wyświetlania daty. W każdym skrypcie można sobie dopisać date jeśli komuś jest to potrzebne do dokumentacji. Porobiłem gotowe wariacje:

 

dategb2.th.gif

 

Kod:

 

get-date

[DateTime]::Now.ToString("d")

[DateTime]::Now.ToString("D")

[DateTime]::Now.ToString("MM/dd/yyyy")

[DateTime]::Now.ToString("MMMM/dddd/yyyy")

[DateTime]::Now.ToString("MMM/ddd/yyyy")

get-date -uformat "%Y / %m / %d / %A / %Z"

 

 

Wyświetlenie wersji konsoli PowerShell i jego podstawowych info:

W samej konsoli wystarczy polecenie:

host lub Get-host

 

Natomiast poza konsolą w wierszu poleceń nalezy wpisać:

PowerShell.exe -?

 

Wyświetlą się przełączniki podstawowe dla ustawienia konsoli, takie jak wersja, startowanie konsoli bez bannera wydawcy, startowanie konsoli bez profilu użytkownika.

Odnośnik do komentarza

DIROWANIE

 

Znane jest zapewne polecenie DIR do wylistowania zawartości katalogu, podkatalogu folderu. Ograniczone polecenie typu:

 

Przefiltrowanie po członowej nazwie pliku, w przykładzie:

Dir w*

 

dirpf5.th.gif

 

Czy przefiltrowanie po nazwie z wyświetleniem własciciela pliku, w przykładzie:

Dir/q w*

 

dir2ue4.th.gif

 

Czy też przejście do innego katalogu z przefiltrowaniem po nazwie z wyświetleniem samej zawartości bez dodatkowych informacji, w przykładzie:

cd C:\WINDOWS\System32

Dir/B x*

 

dir3tq6.th.gif

 

Jeśli dla kogoś przechodzenie z katalogu do katalogu jest niewygodne to może dodac do menu kontekstowego WIERSZ POLECENIA. Prawoklikiem na dany folder - katalog, klikamy na wiersz polecenia, a tam bezposrednio otworzy się wiersz poleceń z ścieżką danego katalogu. O to skrypt Reg, który dodaje te wartość do rejestru:

 

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\cmd]
@="Wiersz polecenia"

[HKEY_CLASSES_ROOT\Directory\shell\cmd\command]
@="C:\\WINDOWS\\System32\\cmd.exe /k cd \"%1\""

 

Zapisujemy wartośći do notatnika, zapisz jako - zaznaczamy wszytskie pliki i dodajemy wartośc REG.

 

 

 

Ale mamy konsolowe polecenie Get-ChildItem, którym możemy wyświetlać zawartości katalogów, podkatalogów, dysku. Wyszukiwać na całym dysku interesujących nas plików z konkretnym rozszerzeniem. Wylistować zawartość rejesteru. Otwierać dokumenty, kasowac dokumenty, Czytać dokumenty. Sortowac po nazwie, po dacie utworzenia, po ostatnim czytaniu, po ostatniej modyfikacji, przesortować według dat, wyliczyć.

 

 

Żeby dowiedzieć się jakie te polecenie ma własciwości oraz metody należy użyć polecenia:

Get-ChildItem | Get-Member

 

childmemru6.th.gif

 

Zostaną wyświetlone metody i własciwości jakie możemy przeprowadzać na obiekcie.

 

 

Na początek kilka skryptów! Pierwszy skrypt, gdzieś te perełke znalazłem na necie i dodałem kilka rzeczy, który ma za zadanie wylistować partycje systemową.

Pliki exe - zaznaczone na kolor żółty

.cmd - zielone

ps1 - czerwone

vbs - czerwone

dll - różowate

txt - Cyan

.url - ciemny zielony

katalogi - niebieski

Zawartość wyświetlana w 3 kolumnach. Reszta plików wyświetlana jest kolorem białym.

 

Function AllColorListWide

($path=$pwd,$Columns=3,[switch]$PassTru,[switch]$recurse,[switch]$directory)

{

$origFg = $host.ui.rawui.foregroundColor

$max = [int]($Host.UI.RawUI.WindowSize.Width/$Columns)

$list = Get-ChildItem C:\ -recurse

Foreach ($Item in $list) {

$field =($item.name.padRight($max).Substring(0,($Max-1))+ ' ')

If ($item.name.length -gt $max -1) {$field =

$field.Substring(0,($Max -3)) + '...'}


If ($item.PSISContainer) {

$Host.UI.Write("Blue",$host.ui.rawui.BackgroundColor,$field)

}

ElseIf (!$directory) {

Switch ($Item.Extension) {

".Exe" {$foregroundColor = "Yellow"}

".cmd" {$foregroundColor = "Green"}

".ps1" {$foregroundColor = "Red"}

".vbs" {$foregroundColor = "Red"}

".dll" {$foregroundColor = "Magenta"}

".txt" {$foregroundColor = "Cyan"}

".url" {$foregroundColor = "DarkGreen"}

Default {$foregroundColor = $origFg}

}

$Host.UI.Write($foregroundColor,$host.ui.rawui.BackgroundColor,$field)

}

If ($PassTru) {$Item}

}

$Host.UI.WriteLine()

}
AllColorListWide

 

A wygląda to tak:

 

sortcolpj9.th.gif

 

sortdir2ek9.th.gif

 

 

Drugim podobym skryptem, który ma za zadanie wylistować kolorem zawartość C:\, C:\WINDOWS, C:\WINDOWS\System32, sort:

Folery, katalogi - Cyan

Exe - czerwony

Vbs - ciemny zielony

dll - żółty

Dodatkowo wyświetla atrybut pliku, Ostatnie czytanie, Lenght - długość. Wylistowanie w jednej kolumnie.

 

gci  C:\, C:\WINDOWS, C:\WINDOWS\System32 | format-table | out-string -stream | %{

if ($_[0] -match "d") {write-host $_ -fore cyan}

elseif ($_ -match ".exe") {write-host $_ -fore red}

elseif ($_ -match ".vbs") {write-host $_ -fore DarkCyan}

elseif ($_ -match ".dll") {write-host $_ -fore yellow}

else {write-host $_}

}

 

Wygląda to tak:

 

sortdir3zf1.th.gif

 

Kolejny - wariacja. Skrypt, który ma za zadanie wylistować cały dysk C kolorami z datą i godziną uworzenia.

 

$list = get-childitem C:\, C:\WINDOWS, C:\WINDOWS\System32 | sort-object

foreach ($objItem in $list) {
  if ($objItem.Attributes -contains "Directory") {
  $fgc="cyan" }
  elseif ($objItem.Extension -eq ".ps1") {
  $fgc="blue" }
  elseif ($objItem.Extension -eq ".exe") {
  $fgc="green" }
  elseif ($objItem.Extension -eq ".zip") {
  $fgc="red" }
  elseif ($objItem.Extension -eq ".rar") {
  $fgc="red" }
  else { $fgc="gray" }
  write-host  $objItem.Name, $objItem.Length, $objItem.LastWriteTime -foregroundcolor $fgc }

 

A wygląda to tak:

 

sortdir4bb3.th.gif

 

 

 

Nastepny skrypt!! Skrypt, który wskazuje konkretny folder w którym mamy własne dokumenty. W tym przykładzie tymi dokumentami są inne skrypty. Skrypt ma za zadanie posortować - przefiltrować skrypty kolorami po nazwie. Więc:

 

Skrypt, który zawiera w nazwie słowo Time - kolor żółty

List - czerwony

Show - zielony

Get - różowaty

Wygląda to tak:

 

colorxk2.th.gif

 

gci  C:\WINDOWS\SHELL  | format-list -property name  | out-string -stream | %{

if ($_ -match "Time") {write-host $_ -fore yellow }

elseif ($_ -match ".List") {write-host $_ -fore red }

elseif ($_ -match ".Show") {write-host $_ -fore green }

elseif ($_ -match ".Get") {write-host $_ -fore magenta }

else {write-host $_ }

}

 

 

Skrypt, który ma za zadanie wylistować wszystkie pliki exe znajdujące się w katalogu Windows:

 

$gdzie = "C:\windows"
$skladnia = get-Childitem $gdzie -recurse | where{$_.Extension -match "exe"} `
| ft -group{$_.Path} name, directory -autosize
$skladnia

 

Wygląda to tak:

 

skladniadt0.th.gif

 

 

Jak wyświetlić wszystkie dokumenty Word znajdujące się na naszym komputerze:

get-childitem C:\ ,D:\ -recurse -include *.doc

 

doknl2.th.gif

 

w innej postaci:

get-childitem C:\ ,D:\ -recurse -include *.doc | Format-List FullName

 

Wyświetlenie wszytstkich dokumentów Word po nazwie wraz z datą ostatniego otwarcia dokumentu, daty utworzenia, ostatniej akcji.

get-childitem C:\ ,D:\ -recurse -include *.doc | Format-table name, LastWriteTime, CreationTime, LastAccessTime

 

Filtrowanie pliku po jego nazwie członowej w konkretnym folderze w dwóch kolumnach:

Get-Childitem C:\WINDOWS\SHELL | where-object -FilterScript {$_.Name -like "E*"} | fw Name -Column 2

 

filterry4.th.gif

 

Zliczanie elementów - sumowanie. Czyli wyliczenie statystiki w postaci liczbowej poszczególnych rozszerzeń plików:

get-childitem | group-object extension

 

noelementbk8.th.gif

 

To samo tylko bez zgrupowania obiektów:

get-childitem | group-object extension -noelement

 

Wylistowanie konkretnej gałęzi rejestru, w tym przypadku zostanie wyświetlona zawartość klucza UNISTALL:

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

 

W innej formie wyświetlania:

Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | sort-object name | format-list name

 

Wygląda to tak:

 

regbu4.th.gif

 

Wlistowanie w trzech kolumnach zawartości katalogu Windows:

Get-ChildItem C: | Sort-Object Name | Format-Wide FullName -Column 3

 

columncg7.th.gif

 

Co najfajniejsze!!! Dla osób przywyczajonych do polecenia DIR, mogą one nadal w konsoli się nią posługiwac. Jak w sposób do tej pory stosowany w lini wiersza polecen jak i w konsoli. Dla przykładu podobny listing z poleceniem DIR:

DIR C:\WINDOWS\Prefetch | Format-Wide -Column 3

 

columndirso2.th.gif

 

 

Oczywiście wystarczy użyć samego polecenia Get-ChildItem by wylistować folder w danej lokalizacji.

 

 

Listing plików znajdujących się na dysku C, posortowany rosnąco według daty, którą sami wybraliśmy.

Polecenie poniżej wylistuje wszystkie pliki, które zostały nadpisane - czytane od 01-01-2008 az do daty końcowej posortowane według daty chierarchicznie:

 

Get-ChildItem -Path C:\ -Recurse | Where-Object {$_.LastWriteTime -gt "01/01/2008"} | Sort-Object LastWriteTime | format-table name, LastWriteTime

 

Tym poleceniem wyświetlimy liste malejącą plików, które zostały nadpisane - czytane poniżej 01-01-2008 aż do daty końcowej, lista może być dość spora. Sort chierarchiczny.

 

Get-ChildItem -Path C:\ -Recurse | Where-Object {$_.LastWriteTime -lt "01/01/2008"} | Sort-Object LastWriteTime | format-table name, LastWriteTime

 

Kolejnym poleceniem wylistujemy zawartośc katalogu Windows plików, które powstały czy zostały stworzone w tym katalogu:

 

Get-ChildItem c:\WINDOWS | Sort-Object CreationTime | Ft name, CreationTime

 

Wylistowanie całej zawartość dysku C plików Txt z pełną ścieżką dostepu:

 

get-childitem C:\ -Recurse -Include *.txt | Format-List Fullname

 

Wylistowanie plików Txt w katalogu, którym aktualnie się znajdujemy:

 

get-childitem *.txt

 

 

Jak wyświetlić wszystkie pliki z rozszerzeniem .OLD na dysku C w pełną ściezką dostępu:

get-childitem C:\ -Recurse *.old | Format-List Fullname

 

Jak wylistować ilość wszystkich katalogów znajdujących się na dysku C w postaci liczbowej :

(gwmi Win32_Directory).Count

lub

get-wmiobject -Class Win32_Directory |group-object status

 

Jak wylistować w postaci liczbowej wszytskie pliki TXT znajdujące się na naszym komputerze:

(Get-Childitem C:\ ,D:\ -recurse *.txt).Count

 

Jak wylistować w postaci liczbowej wszytskie pliki EXE znajdujące się na naszym komputerze:

(Get-Childitem C:\ ,D:\ -recurse *.exe).Count

 

Jak wylistować wszytskie pliki w postaci liczbowej, które znajdują się na dysku C:

(Get-Childitem C:\ -recurse).Count

 

Jak wylistować pliki na dysku C w dwóch kolumnach , które w nazwie członowej zaczynają się od liter "AD":

 

Get-Childitem C:\  -recurse  | where-object -FilterScript {$_.Name -like "ad*"} | fw Name -Column 2

 

childzs9.th.png

 

Jak wylistować biblioteki dll w system32 po członowej nazwie pliku:

 

Get-ChildItem -Path C:\WINDOWS\System32\w*.dll

 

Jak wylistowac biblioteki dll w system32 po członowej nazwie oraz cyfrach w której nazwie się znajdują:

 

Get-ChildItem -Path C:\WINDOWS\System32\w*32*.dll

Get-ChildItem -Path C:\WINDOWS\System32\w*1*.dll

Get-ChildItem -Path C:\WINDOWS\System32\*7*.dll

 

Jak wyświetlić czy dany obiekt jest Katalogiem czy plikiem:

 

Get-ChildItem C:\WINDOWS | Format-Table name,@{Label="DIR";Expression={if($_.Mode -like "d*"){"Katalog"}else{"Plik"}}}

 

katalogqq3.th.png

 

To samo tylko wyświetla informację "TAK lub NIE" jest katalogiem, nie jest katalogiem:

 

Get-ChildItem C:\ | Format-Table name,@{Label="Katalog";Expression={if($_.Mode -like "d*"){"Tak"}else{"Nie"}}}

 

dirrso5.th.jpg

 

 

Mały skrypt, który wyświetla przez nas wybraną datę jakie pliki są stare czy nowe po dacie utworzenia w naszym komputerze. Pliki poniżej 2004 uznawane są za stare:

 

get-childitem C:\WINDOWS | select name, extension, {
 if ($_.CreationTime.year -lt 2004) { "STARE" }
 else { "NOWE" }
}

 

starefv7.th.png

 

 

Podobny skrypt, który uznaje że pliki poniżej 2004 roku, które nie zmieściły się w dacie powyżej 2004, a dokładniej nie zostały otwarte czy nadpisane sortowane są: Old File oraz New File. Krótko pisząć aplikacje, które od dłuższego czasu sobie są w naszym systemie, ale nie były już dawno do niczego uzywane.

 

get-childitem C:\WINDOWS | select name, extension, {
 if ($_.LastWriteTime.year -lt 2004) { "old file" }
 else { "new file" }
}

 

oldko3.th.jpg

 

 

Znalazłem na necie taki skrypcik, który wylistuje ukryte pliki znajduące się na dysku C, wypisze czy to jest plik systemowy, czy tylko do odczytu, czy archiwalny:

 

$i=0
$GciFiles = get-Childitem c:\ -force 
foreach ($file in $GciFiles) {$i++}
$GciFiles |sort |ft name, attributes -auto
Write-host "Ilość elementów: " $i

 

hiddensb3.th.jpg

Odnośnik do komentarza

Troszkę w konsoli WMIC, a dokładniej zapisie danych do pliku html wraz z formatowaniem zawartości.

 

Jak wyświetlić tryb uruchamiania sterowników systemowych posortowanych według trybu uruchamiania w formacie Tabeli z zapisem danych jednych pod drugimi z wykonaniem pojedyńczego polecenia bez bezposredniego wejścia do konsoli:

 

wmic sysdriver get name,pathname,startmode/Format:htable:"sortby=StartMode" > C:\Ster.htm

 

wmic - wejście do konsoli lub jak w tym przykładzie wykonanie pojedyńczej komendy

sysdriver - okreslenie własciwości

get - przefiltrowanie przez nas wybranych danych

name - nazwa skrótowa sterownika

pathname - ścieżka sterownika

startmode - tryb uruchamiania

sortby - sorotowanie wybranej własciwości

format - okreslenie formatu wyświetlania danych

htable - format wyświetlania danych ( własciwości zpaisywane sa obok siebie)

> C:\nazwa.htm - ścieżka zapisu pliku w formacie html

 

Wygląda to tak:

 

wmisortje0.th.png

 

Jak wylistować podstawowe informacje o naszym systemie wykonując pojedynczą komende WMIC z zapisaniem informacji w pliku html:

wmic os list brief /format:htable > C:\OS.htm

 

os - wyświetla informacje na temat systemu operacyjnego

list - przełacznik okreslenia danych

brief - przełacznik dla polecenia list(brief - jako podstawowe informacje o naszym os)

 

Wygląda to tak:

 

wmitabqd8.th.png

 

Jak wylistować pełne informacje o naszym systemie zapisując je do pliku html w formie zapisu właściwości jedne pod drugim:

wmic os list full /format:hform > C:\Os.htm

 

hform - rodzaj wyświetlnia zapisu danych pod sobą

Wygląda to tak:

 

hformkf6.th.png

 

 

Jak wyświetlić rodzaje formatowania wyświetlanych poleceń. Aby dowiedzieć się jakie są dane przełączniki formatowania danych należy użyć po /format -? (znamu zapytania) czyli w przykładzie w samej konsoli:

wmic , nastepnie

os list brief /format -?

Wyświetlą się rodzaje formatowania zawartości wyświetlania:

 

wmiosjz3.th.jpg

 

 

 

Konsola PowerShell.

Jak wyświetlić ProductId naszego systemu ( nie mylić z product key)

 

Get-WmiObject Win32_OperatingSystem | fw SrerialNumber

lub w wmic

wmic os get serialnumber

 

sernumho4.th.png

 

Jak wylistować nr productid w rejestrze:

 

Zmieńmy lokalizację przechodząc do rejestru do konkretnej gałęzi:

sel-location - zmienia lokalizację

set-location hklm:software\microsoft\windows

 

nastepnie poleceniem get-itemproperty, które pobiera właściwośc elementu, wyświetlmy productId:

get-itemproperty currentversion |select ProductId

 

regidwj7.th.png

 

 

Nie napisałem ostatnio kilku rzeczy na temat dirowania, więc teraz to uzupełnie. Na podbudowie wyżej wymienionych skryptów przeinaczyłem ich zadanie.

 

Skrypt, który ma za zadanie wylistować na całym dysku C kolorami, posortowany od najwyższej daty pliki które były otwierane lub nadpisane przez sam system lub przez nas:

 

$list = get-childitem C:\, C:\WINDOWS, C:\WINDOWS\System32 | Select-object LastWriteTime, Name | sort-object LastWriteTime -descending 
foreach ($objItem in $list) {
if ($objItem.LastWriteTime -contains "Directory") {
$fgc="cyan" }
elseif ($objItem.LastWriteTime -gt "01/01/2008") {
$fgc="blue" }
elseif ($objItem.LastWriteTime -gt "01/01/2007") {
$fgc="green" }
elseif ($objItem.LastWriteTime -gt "01/01/2006") {
$fgc="red" }
elseif ($objItem.LastWriteTime -gt "01/01/2005") {
$fgc="gray" }
else { $fgc="white" }
write-host $objItem.LastWriteTime, $objitem.name -foregroundcolor $fgc }

 

pliki które były owarte lub napisane od 01/01/2008 w góre - kolor blue

01/01/2007 - kolor green

01/01/2006 - red

01/01/2005 - gray

Pozostałe pliki wszystkie poniżej 2005 beda zaznaczone na kolor biały.

 

Wygląda to tak:

 

filelistuv0.th.png

 

 

Podobny skrypt, który ma za zadanie wylistować wszystkie dokumenty word znajdujące się na naszym komputerze pod względem ich daty utworzenia posortowany alfabetycznie kolorami:

 

$list = get-childitem C:\ ,D:\ -recurse -include *.doc | Select-object CreationTime, Name | sort-object Name 

foreach ($objItem in $list) {
if ($objItem.LastWriteTime -contains "Directory") {
$fgc="cyan" }
elseif ($objItem.CreationTime -gt "01/01/2008") {
$fgc="blue" }
elseif ($objItem.CreationTime -gt "01/01/2007") {
$fgc="green" }
elseif ($objItem.CreationTime -gt "01/01/2006") {
$fgc="red" }
elseif ($objItem.CreationTime -gt "01/01/2005") {
$fgc="gray" }
else { $fgc="white" }
write-host $objItem.CreationTime, $objitem.name -foregroundcolor $fgc }

 

Dokumenty word starsze niż:

01-01-2008 - kolor blue

01-01-2007 - kolor green

01-01-2006 - kolor red

01-01-2005 - kolor gray

Pozostałe młodsze od daty 2005 kolor biały.

Odnośnik do komentarza

ELASTYCZNOŚĆ KONSOLI PowerShell

 

 

Shell jest na tyle elastyczny że możemy w nim wykonywać prace nie związane tylko z konsolą. Po wejściu w konsole możemy uruchamiać jak w sposób normalny polecenia ze zwkłego wiersza poleceń. Wiązać w skryptach Shella polecenia z lini wiersza poleceń. Możemy beposrednio przejśc w CommandPrompt wpisując CMD, aby wyjść i na nowo wrócić do konsoli wystarczy wpisać EXIT. Możemy wykonywać pojedyńcze wiązania poleceń z konsoli WMIC. Możemy przejść całkowicie z Shella do konsoli WMIC, nastepnie wpisując Exit powrócić do Shella. Wiązać w skrypcie Shella polecenia konsoli WMIC. Wiązać i uruchamiać inne polecenia cmd z narzędzi jak SupportTools czy ResourseKit, Sysinternals itp. Uruchamiać skrypty VBS. W konsoli WMIC możemy tylko posłgiwac się poleceniami zawartami w samej konsoli.

 

 

Jak uprościć sobie życie i uruchamiać skrypty PowerShell bez wpisywania pełnej ścieżki. Przechodzimy do katalogu tam gdzie znajdują się nasze skrypty. Możemy uzyć dwóch poleceń w tym celu by zmienić lokalizację:

 

Set-Location

 

lub dobrze znane:

 

CD

 

Gdy fizycznie znajdujemy się w lokalizacji gdzie umieszczone są nasze skrypty, wybrany skrypt wystarczy uruchomić poleceniem:

 

./NaszSkrypt.ps1

 

czyli

 

./

 

adminwf3.th.png

 

Na załączonym obrazku jest pokazany przykład oraz coś co poniżej opisze.

 

AdminInfo........

Mały wpis, w którym możemy zamieścić swoje dane,imie, nazwisko, adres. Coś w rodzaju karty informacyjnej do kogo ta maszyna należy.

 

@{Imię = "Janek"; Nazwisko = "Kowal"; Miasto = "Warszawa"; TelefonDomowy = "888-777-543"; TelefonKomórkowy ="502403202"; Adres = "Ul.Ciemna 4"; Data = "20/03/2008"; }

 

Jesli chcemy, aby wyświetały się tylko nasze dane na koncu lini należy dodać | format-table value

 

 

Jak uruchamiać skrypty VBS?

 

Musimy przejść do katalogu w którym trzymamy te skrypty. Uruchamiamy je za pomocą hosta skryptów, przykład:

CScript JakiśSkrypt.vbs

 

cscripttq1.th.png

 

 

Zamiana wyglądu naszej konsoli - function prompt (zamiana tekstu zgłoszenia)

 

Na początek może przedstawie jak możemy zmieniać w cmd. W wierszu polecenia mamy do dyspozycji trzy polecenia by zmienić kolor konsoli, napis w belce tytułowej, zmienić tekst zgłoszenia.

 

1) Polecenie Title - zmienia napis w belce tytułowe. Przykład:

Title Wiersz polecenia

 

2) Polecenie Prompt zmienia tekst zgłoszenia, aby wyświetlić funkcje polecenia należy wpisać prompt/?. Przełączniki w prompt możemy dokładać kolejno po sobie (nie tylko zmieniać jedną właściwość). Przykład:

Prompt $T $N $G

 

$T - dodaje datę

$N - dodaje bieżący dysk

$G - dodaje znak większy niż

Każda właściwość musi być poprzedzona spacją.

 

Polecenie Color zmienia kolor tła oraz kolor pierwszego planu, aby wyświetlić funkcje polecenia należy wpisać Color/? Przykład:

Color 8A

 

cmprwv3.th.png

 

8 - zmieni kolor tła na szary

A - zmieni kolor pierwszego planu na zielony

 

 

 

 

Prompt w PowerShellu.......

 

Jak zamienić w belce tytułowej zawartość wyświetlania tekstu według własnych potrzeb lub wybranych właściwości oraz zamienić treść znaku zachęty i jego kolor:

1.........

Zmieni w belce tytułowej - pierwszy będzie przez nas wybrany tekst "Shell" (kazdy może wpisać co mu sie podoba) nastepnie Procesów dlasza właściwość (get-process).count wylistuje w postaci liczbowej ilość procesów działających w danej chwili, nazwa komputera - pobierana z właściwości hostname. Nastepnie zmiana napisu w znaku zachety przez nas wybrana tutaj akurat jest PS Console + > zmieniona na kolor żółty

 

function prompt
{
$host.ui.rawui.WindowTitle = "Shell: " + " Procesów: " + (get-process).count + "  Nazwa komputera: " + (hostname)
Write-Host ("PS Console" +">") -nonewline -foregroundcolor yellow 
return " "
}

 

Wygląda to tak:

 

prompt2ve6.th.png

 

 

Następny:

 

Function Prompt
{
Set-Location C:\
$host.UI.RawUI.WindowTitle = "Lokalizacja: " +  $(get-location)
Write-Host ($(Get-date -format t) + "  MSH  "  + $(Get-Location)   + "") -NoNewLine -ForeGroundColor Gray
Return " "
}

 

Zmienia lokalizację na C:\, nastepnie w belce tytułowej zawidnieje napis LOKALIZACJA oraz zostanie pobrana ścieżka tej lokalizacji. Następnie zostaje zmieniony znak zachety, pobiera on aktualną godzine( Godzina i minuta) - Get-date -format t

Dodaje własny napis MSH skrót od MonadShell (Monad nazwa kodowa PowerSHell) oraz zmienia kolor znaku zachety na szary. Wygląda to tak:

 

prompt4sr6.th.png

 

 

Następny:

 

function prompt

{
$host.UI.RawUI.ForegroundColor = "red"
$host.UI.RawUI.WindowTitle = $Host.Name + " " + $Host.Version + " Sesja"  
Write-Host (" $(Get-Date) Shell>") -nonewline -fore green 
return " "
}

 

Ma za zadanie zmienić kolor wyświetlania całego tekstu w konsoli, tu akurat na kolor czerwony wpisem:

$host.UI.RawUI.ForegroundColor = "red" , nastepnie pobiera do belki tytułowej informacje o konsoli: ConsoleHost oraz wersje Konsoli + dodaje przez nas wybrany słasny tekst. Znak zachęty zostaje zmieniony na kolor zielony w którym zostaje wyświetlana pełna data wraz z pełną godziną - godzina, minuta, sekunda, która jest wciąż odświeżana oraz dodanie własnego napisu w tym przykładzie Shell.

 

Następny:

 

function prompt {
write-host " $(hostname)  $(Get-Location):`n`Składnia polecenia:"  -nonewline -foregroundcolor yellow
return " "   
}

 

Zamienia znak zachęty na żółto, w pierwszej koleności pobiera do znaku zachęty nazwe komputera, aktualną lokalizacje w której się znajdujemy. Pod linią znaku zachęty zostaje dodany własny komentarz: Składnia polecenia. Wygląda to tak:

 

pormpt5mu3.th.png

 

 

Kolejny:

 

function prompt
{
$host.UI.RawUI.WindowTitle =  "$(Get-Date) moja sesja"
Write-Host (" $(Get-Date) MONAD>") -nonewline -foregroundcolor red
return " "
}

 

W tytule belki okna dodaje aktualną datę z godziną uruchomienia konsoli i dodaje napis moja sesja. W znaku zachęty dodaje również aktualną odświeżaną godzinę z wybranym przez nas napisem tutaj jest MONAD po czym zmienia znak zachęty na kolor czerwony. Wygląda to tak:

 

promptth1.th.png

 

 

Jeśli chcemy dodac te same właściwości, ale tylko w belce:

 

function prompt { 
$host.UI.RawUI.WindowTitle = $CurrentUser.Name + "$(Get-Date) moja sesja"
}

 

Jeśli chcemy dodac te same właściowiści, ale tylko w znaku zachęty:

 

function prompt

{
Write-Host (" $(Get-Date) MONAD>") -nonewline -foregroundcolor red
return " "
}

 

 

Kolejny:

 

Pobobny, który pobiera do znaku zachęty date z godziną - odśweżaną, ale sama data z godziną jest w kolorze czerwonym, a dodany przez nas wybrany tekst w kolorze białym:

 

function prompt {
" SHELL>"
Write-Host (get-date) -nonewline -foregroundcolor red 
return " "
}

 

prompt3jk4.th.png

 

Te polecenie zmieni:

 

$a = (Get-Host).UI.RawUI
$a.WindowTitle = "Sesja Shell"
$a.BackgroundColor = "black"
cls

 

Pobierze własciwości do paska tutułowego przez nas wybrany tekst oraz zmieni tło konsoli na czarne, bez dodanie polecenia CLS, które ma za zadanie wyczyścić okno nie zmieni się tło konsoli, a jedynie tlo napisów.

 

Jak na szybko zmienić tekst w znaku zachęty:

function prompt{ "`Monad>"}

 

Jak zmienić przez nas wybraną właściwość w znaku zachety, w tym przykładzie zostanie wyświetlona nazwa komputera:

function prompt { "$env:computername > "}

 

Jak na szybko zmienić kolor znaku zachęty oraz liter:

$host.UI.RawUI.ForegroundColor = "blue"

Jeśli wcześniej został użyty jakiś wpis prompt zmieniający kolor znaku zachęty po wpisie powyżej zostanie tylko zmieniony kolor wyświetlania zawartości poleceń.

 

Function prompt zostanie zmieniona jednorazowo przy jednorazowej sesji, po zamknięciu konsoli i ponownemu uruchomieniu ustawienia konsoli jak wygląd, kolor powróci do poprzednich ustawień czy wyglądu. By zmienić prompt za każdym uruchomieniem, trzeba zmienić Myprofile, ale o tym może innym razem

 

 

EDIT!

 

Napisałem jeszcze trzy funkcje związane z prompt. Sami oceńcie.

 

1.

 

function prompt {
$host.UI.RawUI.WindowTitle = "Konsola PowerShell> " + " Lokalizacja: " + $(get-location) + " > Dziś " + $([DateTime]::Now.ToString("D"))
Write-Host (get-date -format t) " "  -nonewline  -foregroundcolor red 
Write-Host (hostname)  " > "  $(Get-Location)  -nonewline -foregroundcolor yellow
write-host   " Linia:"$host.UI.RawUI.CursorPosition.Y  -nonewline -foregroundcolor green
write-host " Monad> " -nonewline -foregroundcolor gray 
Return " "
}

 

Wygląda to tak:

 

prompt11py4.th.png

 

2.

 

function prompt {
Write-Host " MSH "  -nonewline -foregroundcolor yellow
write-host " SearchEngines:"  -nonewline -foregroundcolor gray 
write-host   " [Linia]"$host.UI.RawUI.CursorPosition.Y  -nonewline -foregroundcolor green
Return " "
}

 

Wygląda to tak:

 

prompt22zx3.th.png

 

3.

 

function prompt {
write-host "[sesja]"  [(get-location)] [($host.UI.RawUI.CursorPosition.Y)] " `n`   >" -nonewline -foregroundcolor yellow
Write-Host " [Monad]: "  -nonewline -foregroundcolor red
return " " 
}

 

Wygląda to tak:

 

prompt33nu7.th.png

 

 

Ustawianie własnego profilu - MyProfile

 

Jak ustawić własny profil w konsoli podczas każdego uruchamiania kosnoli. Mianowicie jeśli ktoś ma własne funkcje prompt, a chce by uruchamiały się za każdym uruchomieniem konsoli musi zrobić:

- stworzyć plik ps1 o nazwie- Microsoft.PowerShell_profile

- w pliku Microsoft.PowerShell_profile zamieścić własny prompt lub inne ustawienia

- wejść do katalogu C:\WINDOWS\system32\windowspowershell\v1.0

- w katalogu v1.0 wkleić stworzony plik

- uruchomić konsole by sprawdzić czy MyProfile działa

 

profilehh1.png

 

Ten plik to zwyczajny skrypt ps1, uruchamia się dość szybko, aby nie było widać powitalnego napisu M$ w pierwszej części pliku dopisać CLS, można też własny komentarz i oczywiście funkcje prompt:

 

cls 
# wiadomość powitalna
"Witaj w konsoli : " + $env:Username

 

Własne MyProfile można bezproblemowo usunąć w tedy konsola powróci do systemowych ustawień.

 

 

 

Przykładowy cmdlet Shella

 

Cmdlet, Alias, Opis

Add-Content, ac, dodaje zawartość

Add-PSSnapin, asnp, dodaje wtyczkę

Get-Alias, gal, pobiera alias

Get-PsDrive, gdr, pobiera informacje o napędach

Stop-Process, spps, zatrzymuje proces

Stop-Service, spsv, zatrzymuje usługę

Sort-Object, sort, sortuje obiekty

Start-Sleep, sleep, uruchamia uśpienie

Set-Location, cd, zmienia lokalizację

Set-Item, si, Ustawia element

Format-Table, ft, formatuje dane w postaci tabeli

Where-Object, ?, gdzie obiekt

Export-Alias, epal, eksportuje alias

Get-WmiObject, gwmi, pobiera obiekt

Copy-Item, cpi, kopiuje element

Group-Object, group, grupuje obiekty

Get-History, ghy, pobiera historię

 

Sesja logowania

Jest kilka sposobów, by sprawdzić kto się zalogował na naszej maszynie lub kto był zalogowany.

Mamy do dyspozycji dwa narzędzia Sysinternals LogonSessions oraz PsLoggedOn

Narzędzie LogonSessions listuje kto był ostatnio zalogowany do naszego systemu, a narzędzie PsLoggedOn listuje uzytkowników, którzy zalogowali się bezposrednio do naszego systemu. Obie aplikacje działają bez instalacji, wklejamy je do C:\Windows\System32. Działają z lini wiersza polecenia.

 

Możemy również skorzystać z klasy WMI.

 

Get-WMiObject Win32_LogonSessions - opisuje sesje lub sesje logowania, użytkowników który zalogował się do systemu.

Get-WMiObject Win32_LoggedOnUser - opisuje relację między sesją, a kontem użytkownika korzystającym z tej sesji.

Odnośnik do komentarza

Przydatne skróty klawiaturowe

Na strone CentrumXp jest ciekawy artykuł właśnie jak wyżej w tytule.Klik Można je stosować w PS, ale jedna uwaga łączniki poleceń & nie działają w Shellu, zamiast nich używa się ;. Przykładowy skrót wyświetlający w postaci tabeli historie wpisanych poleceń( klawisz funkcyjny F7).

 

helpps0.th.png

 

 

 

BgShell - BackgroundShell

 

To jest jakby edytor Shella spełniający funkcje PowerShella. Działa bez instalacji. Działa bez potrzeby uruchomienia PowerShella. Możemy na nim wykonywać podstawowe czynności, uruchamiać skrypty. Jednakże nie działa w nim PowerTab.

Możliwość ukrycia okna. Dostępny pod adresem:

http://www.leeholmes.com/blog/BgShellNdash...roundShell.aspx

 

bgshellxh1.th.jpg

 

 

 

Dir-LIVE

Jest to ciekawa propozycja - skrypt, który ma za zadanie listować miejsce w którym się aktualnie znajdujemy. Dodaje własne komentarze. Zapisać jako Dir-LIVE.ps1 do katalogu Windows. Można go uruchamiać po samej nazwie. Do pobrania pod adresem:

http://www.leeholmes.com/blog/MonadBreakin...omStrategy.aspx

 

dirlivelw3.th.jpg

 

 

 

 

 

 

PoshConsole

poshrn9.th.jpg

 

To kolejna implementacja konsoli napisana w kodzie otwartym.Można ją uruchamiać bez potrzeby uruchomienia Shella.

Działa bez instalacji. Jednakże podczas testowania program kilka razy się zawiesił, a w 50% używa pełnej mocy procesora przy wykonywaniu głębszych zadań. Wersja jest uaktualniana. Strona główna:PoshConsole Home, do pobrania na samym dole strony ->Klik

 

 

 

 

aplikra6.gifShinyPower

ShinyPower jest to niewielkich rozmiarów narzędzie, działające bez instalacji. Działające bez potrzeby uruchomienia Shella. Aplikacja ta wyświetla obiektowo wszystkie polecenia PowerShella z opisem i właściwością konkretnego cmdletu oraz pomoc polecenia. Wystarczy zaznaczyć interesujący nas cmdlet i sekunde poczekać na wyświetlenie się wyników. Wygodne jeśli chcemy szybko uzyskać informacje o danym poleceniu bez potrzeby wpisywania poleceń w konsoli. Obsługuje wersje 1.0 i 2.0. Należy zauważyć że narzędzie te nie wyświetli innych poleceń, które zostały dodane do konsoli jako dodatkowe paczki cmdletów. Być może w przyszłości będzie posiadała taką możliwość. Strona główna: ShinyPower

 

shinypb3.th.png

 

 

 

 

Saipen - Windows PowerShell Help Tool

saipen1bi6.png

Jest to propozycja firmy Saipen. Help Tool narzędzie pomocy cmdletów PowerShella. Prawie identyczne w

działaniu co do aplikacji wymienionej wyżej. Wyświetlające polecenia Shella z opisem właściwości konkretnego

cmdletu oraz pomocy. Wymaga instalacji. Aby narzędzie działało poprawnie należy mieć zainstalowany

PowerShell oraz Net.framework 2.0. Dodatkowo wyświetla w pomocy własne paczki cmdletów - PshX-SAPIEN.

Lecz nie wyświetla paczek cmdletów dołożonych do konsoli innych wydawców. Posiada mozliwość zmieniaia skórki

programu. Narzędziownia Saipen skąd można pobrać aplikacje: Windows PowerShell Help Tool. Instrukcja

narzędzia: PowerShell Help Tool - Pdf.

 

 

 

 

 

Dos + Batch File = ChangeSizeWindowShell

Siedziałem sobie u mojego kolegi Gejzera, który jest adminiem sieci. Pokazał mi polecenie dosowe, którym można zmienić rozmiar okna CMD według własnego uznania i stworzyć gotowy plik wsadowy lub kilka, umieścić je w katalogu C:\Windows i po nazwie pliku uruchamiać w oknach konsoli. Okazuje się że równie bardzo dobrze spełnia swoją role w PowerShellu. Poleceniem Mode con możemy sprawidzić w ilu wierszach jest podana wysokość okna, a w kolumnach jego szerokość w aktualnie otwartym oknie wiersza polecenia. A więc - Otworzyć notatnik, a w nim zapisać:

 

mode con COLS=100 LINES=560 - zapisać zmiany pod dowolną nazwą pliku z rozszerzeniem batch. Uruchamiać po nazwie pliku w oknie Shella, tak jakby wpisywało się zwykłe polecenie.

 

COLS=100 - szerokość okna (wartość dowlona)

LINES=560 - wysokość okna (wartość dowolna) - dokładniej zawartość okna

 

Wizualnie widać zmiane, ale możemy powrócić do polecenia Mode con by sprawdzić czy wprowadzone dane z pliku wsadowego sa aktualne ze stanem rzeczywistym rozmiaru okna. Plik ten nie zmienia ustawień systemowych okna PowerShella jak i wiersza poleceń. Używa się go w tej postaci podczas pojedyńczej sesji. To tyle......

 

 

 

 

PowerShell Tip of the Week

kalzx0.png

 

W dziale PowerShell na stronie M$ jest prezentacja tworzenia kalendarza. Skrypt jest dostępny dla wszystkich, wystarczy go skopiować. Creating a Graphical Date Picker

 

 

Making Progress

add1av1.png

 

Tak sobie jeszcze zwiedzałem Tip of the Week i natrafiłem na mały ciekawy skrypcik. To skrypcik, który listuje zawartość katalogu Windows i wszystkich jego podkatalogów w poszukiwaniu bibliotek dll (oczywiście rozszerzenie można zmienić). Polecenie Write-Progress tworzy pasek w którym wykonuje zadanie, tzn prosto pisząc, gaficznie pokazuje stan wykonania skryptu. W tym przykładzie jest to procentowe wykonanie listingu bibliotek dll. Skrypt na końcu podaje zliczony rozmiar wszystkich bibliotek. Więcej na stronie Tip of the Week - Making Progress

 

 

 

 

Set your Powershell console window icon

 

icons2cj6.png

 

iconsvh3.png

 

seicowd7.png

 

 

 

Przypakiem znalazłem taki skrypcik, który zmienia ikone w PowerShellu podczas pojedyńczej sesji. Ikone zapożyczyłem z Community Extensions. Użycie skryptu bardzo proste:

Set-ConsoleIcon "C:\Icons\special_powershell_icon.ico"

Skrypt dostępny pod adresem Set-ConsoleIcon

 

 

 

Get-GuiHelp

 

Ciekawa prezentacja MS, potrzebny jest skrypt Get-GuiHelp oraz PowerShell Graphical Help File (Version 2.0), który można pobrać stąd. Plik pomocy PowerShell Graphical Help File.chm umiejscowamy do wybranej lokalizacji, następnie w skrypcie podajemy lokalizację pliku, wpisując dokładną nazwę pliku. Skrypt proponują umiejscowić w profilu tak, aby funkcja była gotowa do użycia od momentu uruchomienia konsoli. Użycie jest proste np. Get-GuiHelp Get-Process. Po wykonaniu polecenia otworzy się Graphical Help File z opisem i przykładami użycia wybranego polecenia. Przykład dla wersji PowerShell 2 CTP. To tyle...

 

 

 

How Can I Tell When I Last Logged On?

czyli data ostatniej sesji w konsoli

 

W Centrum Skryptów pojawił się skrypt, który ma za zadanie wykazać date ostatniej sesji w konsoli PowerShell.

 

sesjakj5.png

 

Zaprezentowali i zasugerowali by umieścić skrypt w autostarcie w profilu Administratora.

C:\Documents and Settings\Administrator\Menu Start\Programy\Autostart

Następnie w skrócie podać ścieżke do skryptu:

C:\WINDOWS\system32\WindowsPowerShell\v1.0\powershell.exe -noexit  -noprofile C:\WINDOWS\SKRYPTY\LastLogon.ps1

autozf3.png

 

Konsola automatycznie uruchomi się przy starcie systemu bez uruchamiania profilu, uruchomi skrypt i pokaże wynik. Jednak już od dłuższego czasu coś zauważyłem i nie ma na ten temat żadnych informacji, chyba że coś przeoczyłem. Wystarczy skopiować obojętnie jakiś skrypt do lokalizacji:

C:\WINDOWS\system32\WindowsPowerShell\v1.0

I każdy skrypt zostanie automatycznie załadowany podczas startu konsoli. Wystarczy wpisać nazwe pliku bez rozszerzenia by otrzymać wynik. Jeśli konsola jest już uruchomiona i umieścimy w tej lokalizacji skrypt - nie wykona się. Trzeba zrestartować konsole, ale jest to jednorazowa sprawa. Postanowiłem tak zrobić i do tego zrestartowałem system - działa.

 

lastun0.png

 

Artykuł dostępny pod adresem: The Scripting Guys Answer Your Questions

Odnośnik do komentarza

mycolorsa0.jpg

 

bookif6.gifMENU II

 

ksiazib2.gifProgramy, skrypty, publikacje:

poweraj6.pngPowerShell Script Generator Add In for Microsoft Office Visio 2007
poweraj6.pngwatch-folder (Monitorowanie zmian w folderze, PS 2.0 CTP3)
poweraj6.pngSkróty klaiwaturowe w PowerShell
poweraj6.pngOpen PowerShell in the current Explorer window (Vista)
poweraj6.pngSearching PoshCode repository from your Desktop in Windows 7

ksiazib2.gifKsiążki:

poweraj6.pngWindows PowerShell. Podstawy (Holger Schwichtenberg, 2009-03-01, PL)
poweraj6.pngWindows PowerShell 2.0 Administrator's Pocket Consultant (William R. Stanek, 2009-05-27, ENG)
poweraj6.pngEffective Windows PowerShell.pdf (Keith Hill, 3/8/2009, ENG, FREE)

 

 

 

 

******************************************************************

 

PowerShell - listing komunikatów błędów z dziennika zdarzeń w formacie html.

 

$a = "<style>"
$a = $a + "BODY{ background-color:#EEEEEE; }"
$a = $a + "TABLE,td,th{ font-family:Tahoma; color:Black; Font-Size:10pt }"
$a = $a + "TH{ font-weight:bold; background-color:#CCCCCC; }"
$a = $a + "TD{ background-color:white; }"
$a = $a + "</style>"

Gwmi Win32_NtLogEvent | Where-Object -FilterScript { $_.EventType -like '1'} | Sort-Object LogFile | Select-object Logfile, Message, SourceName,Type, TimeGenerated | 
ConvertTo-HTML -head $a -body "<H2>Wpisy błędów z dziennika zdarzeń</H2>" | Out-File C:\ErrorLog.htm

 

 

Nie mam zbyt wielu wpisów error, zakładki w dzienniku posegregowane, więc logi biedne. Skrypt wykonałem na podbudowie wcześniejszego. Można sobie dowolnie ustawiać kolory komórek czy tabeli lub tła. Jeśli ktoś chce więcej wpisów własności by się znalazły w logu niech zajrzy do konsoli, poleceniem Gwmi Win32_NtLogEvent | Get-Member i dokłada własności w tym miejscu:

 

| Select-object Logfile, Message, SourceName,Type, TimeGenerated, NastępnaWłasność

 

Tworzenie szybkiego loga przekonwertowanego do pliku html, wpisów z dziennika zdarzeń, posiadające ostrzeżenia, zebrane z całego dziennika, zakładki posegregowane:

 

gwmi Win32_NtLogEvent | Where-Object -FilterScript { $_.EventType -like '2'} |Sort-object LogFile | Select-object LogFile, Type,  SourceName, Message, TimeGenerated | ConvertTo-HTML -title "OSTRZEŻENIA" | Out-File C:\Warning.htm

 

To samo tylko zastosowana inna metoda:

 

gwmi -query "select * from win32_NtLogEvent where EventType='2'"  |Sort-object LogFile | Select-Object LogFile, Type,  SourceName, Message, TimeGenerated | ConvertTo-HTML -title "OSTRZEŻENIA"  | Out-File C:\Warning.htm

 

 

 

 

******************************************************************

 

PowerShell Trainer

 

trenercb1.png

 

PsTrainer czyli PowerShell Trener jest to wersja testowa do nauki PowerShella za pomocą interaktywnego interfejsu. Narzędzie ma posiadać podpowiedzi, będzie sprawdzać czy użytkownik użył właściwego polecenia, aby zrealizować zamierzony efekt. Na razie jest to dość wczesna wersja testowa. Puki co projekt jest zawieszony przez twórcę na jakiś czas i nie będzie w tym okresie rozwijany. Aplikacja nie wymaga instalacji. Strona projektu: PSTrainer

 

******************************************************************

 

PowerShell będzie domyślnie instalowany w Windows 7 oraz Windows Serwer 08 RC2 - opublikowane dnia 31.10.2008

 

- więcej na blogu PowerShell Team Blog

 

 

******************************************************************

 

 

Out-Form jest to skrypt tworzący GUI dla jakiegoś wyniku. Skrypt jest do pobrania na stronie podanej wyżej, jak i również na tej samej stronie znajduję się przykład użycia by otrzymać wynik okienkowy z przyciskami wykonywującymi określone funkcje. Dla przykładu, jak powyżej widać na obrazku, stworzyłem przycisk fuknkcyjny, który ma za zadanie zakończyć wybrany proces.

 

******************************************************************

 

PowerShell 2 CTP3 - praca w tle

 

Na blogu huddledmasses jest artykuł poświęcony nowej wersji PShella - First Impressions. W dużej części przedstawia on opisanie nowych przełączników, które umożliwiają ukrycie okna konsoli i pracę w tle jakiegoś skryptu. Na stronie w przykładach pokazano skrypt wyświetlający tekst powitalny w GUI, jak i również uruchamianie spod samego wiersza poleceń. Osoby, które na razie nie przesiadają się na CTP3 mogą użyć Hstart. W przykładzie, ukryć okno konsoli z uruchomieniem widocznego skrypt GUI, wykonywującego jakieś zadanie:

 

hstart /NOCONSOLE "PowerShell.exe "C:\Windows\TwójSkrypt.ps1""

Po zamknięciu skryptu, zostanie również zamknięta pracująca w tle konsola.

 

******************************************************************

 

PowerShell Help (PowerPack) dla PowerGUI

 

post-24-12749723832474_thumb.png

 

PowerShell Help jest zaktualizowaną wtyczką dla PowerGui (UpDate 07.12.08), dostepną już od jakiegoś czasu. Aktualizacja poszerza wtyczkę o nowe funkcje. PowerShell Help jest to system pomocy, wyświetlający szczegółowe dane na temat cmdletów, aliasów, funkcji, dostawców, dodanych wtyczek. Jest to bardzo wygodny PowerPack, gdy się chce uzyskać informację bez wpisywania poleceń w konsoli.

 

 

 

******************************************************************

 

ZESTAW SKRYPTÓW DLA CTP3

 

Na blogu lista skryptów jest cały czas dokładana, więc spis może ulec zmianie. Umieszczam listę teraźniejszą, opublikowaną - 02.01.2009.

 

Get-DateTime

Get-Domain

Get-TypeAccelerator

Get-StockQuote

Validate-EmailAddress

Get-AutoHelp

Get-Win32Share

Get-Formatstring2

Get-Format1

Get-EvenNumber

 

 

******************************************************************

 

PowerShell WMI Wizard

 

post-24-1274972226653_thumb.jpg

 

PowerShell WMI Wizard jest skryptem GUI, zbudowany w PrimalForms. Pozwala zbierać klasy WMI na lokalnym lub zdalnym komputerze, wyniki zostaną wyświetlone w konsoli, aby pobrać narzędzie należy uzupełnić krótki formularz, podając adres własnej skrzynki pocztowej na który przyjdzie link do pobrania. WMI Wizard

 

 

******************************************************************

 

PowerBoots

 

post-24-12749724720192_thumb.png post-24-12749724907425_thumb.png post-24-12749726454897_thumb.jpg

 

Na wstępie zaznaczę że PowerBoots działa tylko w wersji konsoli CTP3. PowerBoots jest zbiorem poleceń, które umozliwiają tworzenie okien, przycisków, wykazów, umożliwia generowanie grafiki w której można stworzyć galerię, wprowadzanie własnych styli oraz odsyłaczy. PowerBoots jest modułem i tak też jest uruchamiany z poziomu konsoli. Folder z plikami PowerBoots umieszczamy w katalogu "Modules", konsole uruchamiamy z przełącznikiem -STA i następnie pobieramy moduł.

 

Aby wyświetlić spis dostępnych funkcji, należy użyć polecenia:

Get-Command -Module PowerBoots

 

Tutorial - An introduction to PowerBoots. Znajduje się tam wiele przykładów użycia. Projekt jest bardzo świeży.

 

******************************************************************

 

Invoke-ISE

 

post-24-12749725944934_thumb.png

 

function Invoke-ISE{	 
param (	 
	[string[]]$file,	
	[string]$path="$pshome\powershell_ise.exe"   
)	 
  
 if($file){	
	foreach($f in $file){	
		& $path (resolve-path $f)	
	}	
 } else {	
	& $path		
 }	
}	 
  
Set-Alias ISE Invoke-ISE

Źródło: scriptfanatic

 

 

 

Invoke-ISE jest to fajny skrypcik dla wersji konsoli CTP3. Pozwala on na uruchomienie z poziomu konsoli edytora skryptów Windows PowerShell (ISE), ale to nie jest jedyna zaleta skryptu. Funkcja Invoke-ISE pozwala na edytowanie wybranego skryptu otwierając go w edytorze z poziomu konsoli, który można poddać dalszej obróbce lub wykonać w samym ISE. Ilość edytowania skryptów jest nieograniczona.

 

 

******************************************************************

 

Nowy PoshConsole

 

 

post-24-12749726963822_thumb.png

 

Program już od dawna znajduje się w linkowi. Nowa wersja PoshConsole nadal jest wersją alfa. Co nowego? Prawie całkowicie zmieniony wygląd, została dodana wyszukiwarka oraz auto-uzupełnianie, pomysł znany z PowerTab. Wersja nie ma wbudowanej opcji ukrycia Win+~, jednakże autor udostępnił kod, którym można to wykonać.

 

 

******************************************************************

 

 

Seria filmów prezentujących PowerGUI w akcji, podzielonych na pięć części, od momentu pobrania i instalowania po ustawianie filtrów i generowanie raportów oraz korzystania z edytora.

 

******************************************************************

 

Problem z pomocą w edytorze PowerShell ISE

 

Może się tak zdarzyć po instalacji wersji testowej CTP3, pomoc edtyora ISE będzie kompletnie niedostępna, a jest bardzo przydatna. Użycie w edytorze klawisza F1 wywoła pomoc cmdletów. Fajną funkcją jest wywołanie pomocy dla konkretnego polecenia, coś w stylu Get-GuiHelp, wystarczy w edytorze wpisać polecenie, trzymać nad nim kursor i użyć pomocy(F1). Przyczyną braku dostępu do pomocy może okazać się nieprawidłowy numer identyfikacyjny ustawień regionalnych (LCID), który znajduję się w katalogu C:\WINDOWS\Help\Mui. Instalator w moim przypadku utworzył angielskie ustawienia C:\WINDOWS\Help\Mui\0409\.chm. Wystarczy utworzyć

nowy folder z identyfikatorem \Mui\0415 i umieścić plik pomocy. Następnie ponownie spróbować użyć pomocy. W moim przypadku działa. Tabela numerów identyfikacyjnych List of Locale ID (LCID) Values as Assigned by Microsoft (dla Xp,2003). Problem jest również opisany na japońskiej stronie PowerShell ISE. Zaznaczam że problem wystąpił w XP Pro SP3.

 

 

******************************************************************

 

 

Korzystanie OnLine z pomocy edytora PowerShell ISE

 

post-24-12749727856334_thumb.png

 

Using Help in PowerShell ISE jest dostępny artykuł ze skryptem, który pozwala na korzystanie z pomocy edytora ISE bezpośrednio z TechNET. Wyniki zostaną wyświetlone w formacie pliku .chm. Przed skorzystaniem z pomocy OnLine należy wcześniej wyłączyć pomoc lokalną:

 

$psISE.Options.LocalHelp = $false

 

Z tego formatu pomocy można tylko korzystać w ISE. Według potrzeb można utworzyć własny profil dla ISE (Microsoft.PowerShellISE_Profile.ps1) i umieścić w nim ten skrypt, również według potrzeb można w nim od razu wyłączyć pomoc lokalną i korzystać OnLine lub uruchamiać ręcznie z przykładu powyżej. Aby włączyć pomoc lokalną, należy użyć polecenia:

 

$psISE.Options.LocalHelp = $true

 

Wywołanie pomocy OnLine jest takie same jak lokalnej, klawiszem funkcyjnym F1. Również można wywołać pomoc dla konkretnego polecenia, wpisując w edytorze wybrane polecenie, umieścić na nim kursor i wywołać pomoc OnLine.

 

 

******************************************************************

 

PowerBoots

 

Oficjalne wydany w CodePlex (07.02.2009). Wersja Beta, posiada teraz Out-Wpf, który jest wbudowany w PoshConsole

 

 

 

******************************************************************

 

Zmiana wyglądu edytora PowerShell ISE

 

post-24-12749729687569_thumb.png post-24-12749730087612_thumb.jpg

 

Przypadkiem znalazłem taki temacik o zmianie wyglądu interfejsu edytora ISE - Using a Color Dialog to choose colors for ISE. Na dzień dzisiejszy w edytorze jest brak opcji zmian interfejsu programu. Na stronie, którą podałem dostępne są trzy skrypciki, które zmieniają kolor okna cmd, wykonywalnego, itp.

 

- Set-CommandBackPaneColor

- Set-OutputPaneColor

- Set-ScriptPaneColor

 

Te funkcje można dodać do profilu ISE, tworząc w nim niestandardowe menu. Funkcję można wywoływac z menu lub wpisać polecenie w oknie edytora, nastepnie pojawi się monit o wprowadzeniu zmiennych. Ustawienia interfejsu przechowywane są w zmiennej $PsIse

 

IseShell> $psISE.Options | gm

TypeName: System.Management.Automation.Host.Options

Name

----

PropertyChanged

Equals

GetHashCode

GetType

RestoreDefaults

RestoreDefaultTokenColors

ToString

CommandPaneBackground

CommandPaneUp

DefaultOptions

FontName

FontSize

LocalHelp

OutputPaneBackground

OutputPaneForeground

OutputPaneTextBackground

ScriptPaneBackground

ScriptPaneRight

ShowWarningBeforeSavingOnRun

ShowWarningForDuplicateFiles

TokenColors

 

 

 

Z ciekawości na podstawie kodu ze strony dodałem funkcję Zmień-RozmiarCzcionki i utworzyłem dla niej skrót klawiaturowy:

function Zmień-RozmiarCzcionki {
param
(
[parameter(Mandatory=$true,ValueFromPipeline=$true)]
$FontSize 
)
$psise.Options.FontSize = $FontSize
}
$null = $psIse.customMenu.subMenus.add("Zmień-RozmiarCzcionki",{Zmień-RozmiarCzcionki},"CTRL+9")

 

 

 

I działa. To tyle...

 

Inny skrypt zmieniający wygląd okien ISE, w tym zmiana koloru podswietlenia składni ze względu na wprowadzoną czerń - blackboard.ps1 .

 

******************************************************************

 

Złożone sortowanie

 

post-24-1274973072912_thumb.png post-24-12749731749716_thumb.jpg

 

Kiedyś pisałem o poleceniu Out-GridView, który wysyła wynik do nowego okna i pozwala na grupowanie czy sortowanie elementów po ich nazwie lub własności. Dawno się nie bawiłem tym poleconkiem, a jak się zaczołem nim bawić to zauważyłem nowe funkcje, pozatym RealiseNotes nie do końca przeczytałem;). W przykładzie listowałem katalog w którym trzymam sobie skrypty, przesłałem wyniki do nowego okna poprzez Out-GridView. I teraz poza grupowaniem elementów po ich atrybucie, poza wyszukiwaniem po nazwie, w prawej górnej części okna znajduje się pozycja ADD, znajdują się w niej własności, należące do polecenia Get-Childitem, takie jakie zostały użyte w poleceniu. Zechciałem wyszukać skryptów, które były ostatnio modyfikowane w danym okresie czyli od-do. W tabeli należy dodać pozycję LastWriteTime. Pojawi się mała wyszukiwarka, a po lewej jej stronie atrybuty do wyszukiwania, z pozycji należy wybrać is between, wpisać daty i kliknąć na ikonę wyszukiwarki i czekać na wynik, dodatkowo w górnej wyszukiwarce listować z grupy pliki po nazwie, jeśli potrzebny jest jeszcze bardziej konkretny wynik. Musze przyznać że jest to całkiem wygodny sposób wyszukiwania i przyjemny.

 

 

 

******************************************************************

 

Function prompt w ISE

 

W edytorze ISE również można zmienić tekst zgłoszenia, czy dodać do niego jakieś funkcje, jak i w belce tytułowej. Tak samo jak w konsoli PShella. Również identycznie umieszczamy tą funkcję w profilu ISE (Microsoft.PowerShellISE_Profile.ps1), jeśli chcemy, aby ta funkcja ładowała się za każdym uruchomieniem edytora. Zmiany zachodzą w tych samych zmiennych, jak np.

 

$Host.UI.RawUI.WindowTitle

 

Więc możliwości jest wiele, w prostym przykładzie zmiana nazwy belki tytułowej z pobieraniem lokalizacji, w tekście zgłoszenia dodanie własnego tekstu oraz zliczanie użytych poleceń.

 

function prompt {
$Host.UI.RawUI.WindowTitle = "ISE   " + $(get-location)
$licz = (Get-History -count 1).Id + 1
Write-Host "[${licz}]" -NoNewLine -fore darkred
write-host   "ISE" -fore blue
}

promptise.th.png

Odnośnik do komentarza
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...