KolegaDudysa Opublikowano 27 Maja 2010 Zgłoś Udostępnij Opublikowano 27 Maja 2010 PowerShellWył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.plPowerShell 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: Paczka skryptów z M$ Windows PowerShell 1.0 Documentation Pack Windows PowerShell Quick Reference Windows PowerShell Graphical Help File Windows PowerShell Graphical Help File (Version 2.0) Free Windows PowerShell Book Wstęp do PowerShell-WSS.pl Materiały pomocnicze-Politechnika Gdańska Polityki uruchamiania skryptów Wikipedia Pash = PowerShell + Bash IIS 7.0 PowerShell Provider Tech Preview 1 Codeplex - skrypty różnych autorów Strona główna Windows PowerShell 2.0 CTP2 The Windows PowerShell Toolbox Książki: Windows PowerShell. Leksykon kieszonkowy (Lee Holmes -Data wydania: 10/2008) Windows PowerShell Przewodnik po skryptach (Data wydania: 09/2008) PowerShell Krok po kroku (Data wydania: 08/2007) PowerShell in Practice (Richard Siddaway - Data wydania: August 2008) Windows PowerShell? v2.0: TFM 3rd Edition Windows PowerShell 2 For Dummies - by Steve Seguis Microsoft Powershell, VBScript & JScript Bible - by William R. Stanek (Publication Date: January 2009) Windows PowerShell Quick Reference - by Lee Holmes, 2006 Pro Windows PowerShell (Pro) by Hristo Deshev Windows PowerShell - Guide de référence pour l'administration systeme Scripting mit Windows PowerShell Microsoft Windows PowerShell Programming for the Absolute Beginner Windows PowerShell Crashkurs Windows Powershell Tfm Professional Windows PowerShell - Andrew Watt Windows Powershell in Action Windows Powershell Cookbook Windows Powershell Unleashed Professional Windows Powershell Programming - Arul Kumaravel & Jon White & Michael Naixin Windows Powershell V1.0 Tfm 2nd Edition Windows powershell - kit d'administration by E. Wilson Windows Powershell 2.0 Unleashed Sams Teach Yourself Windows PowerShell in 24 Hours Windows PowerShell Scripting Guide Monad (AKA PowerShell) An Introduction to Microsoft PowerShell Schnelleinstieg in die Windows PowerShell PowerShell Pocket Reference - By Lee Holmes, May 2008 Windows PowerShell : The Definitive Guide by -Lee Holmes (2007) Essential PowerShell By Holger Schwichtenberg, Jun 2008 BLOGI POWERSHELLPrzykłady, skrypty, publikacje, programy, pomoc: PoshXmpp (umożliwia wysyłanie i odbieranie wiadomości poprzez Jabbera) OneNote PowerShell Provider (umożliwia zapis wyników w programie OneNote z pakietu Office) Windows Desktop Search Powershell Cmdlet (do poprawnego działania należy mieć zainstalowany WDS - Windows Desktop Search) PowerShell dig (nslookup) Cmdlet! - PoshNet How Can I Determine Folder Size? PowerShellASP (Freeware) The Official Scripting Guys Forum! cd into Sysinternals Tools from PowerShell New Free Windows PowerShell Quick Reference Card Background Timer PowerShell WPF Widget PowerPad Windows PowerShell Virtual Machine Manager Cmdlet Reference PowerShell Quick Reference By Lee Holmes (2006) dostępne w Google Windows PowerShell Week Script Samples The VBScript to Windows PowerShell Conversion Guide Out-BarGraph ActiveXPoSH (PS for VBScript/JScript) - SAPIEN Tech Determining the Size of a Folder Get-Ipconfig function select-member Dir Na polskich stronach: Powershell v2.0 wspiera WPF by danieb Powershell się przyjął by danieb Windows PowerShell - dobry wygląd (Artykuł w TechNet) IIS7 Powershell provider CTP2 SKRYPTY VBS I ZESTAWY NARZĘDZISkrypty vbs, Centrum skryptów w Twoim komputerze, narzędzia: Script Center All-in-One (pobierz z M$) TechNet Script Center Sample Scripts (pobierz z M$) Do-It-Yourself Script Center Kit (pobierz z M$) Sesame Script, 2005-2007 (pobierz z M$) Narzędzia: Sysinternals (Mark Russinovich, Bryce Cogswell, M$) Support Tools (Zestaw narzędzi M$) Resource Kit (Zestaw narzędzi M$) Odnośnik do komentarza
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 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
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 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 Narzędzie list modules ma to do siebie że wypisze tylko moduły interesującego nas procesu, uzycie z lini wiersza polecenia: listmodules PID 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ń: 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: 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: (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: 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 Klass WMI w systemie jest prawie 1000szt. Można przejrzeć prawie każdą śrubke systemu, aby wylistować klasy WMI nalezy wpisać: Get-WmiObject -list 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
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 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. 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: Odnośnik do komentarza
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 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
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 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
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 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: 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: 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: 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: 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: 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
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 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* Czy przefiltrowanie po nazwie z wyświetleniem własciciela pliku, w przykładzie: Dir/q w* 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* 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 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: 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: 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: 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: 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: Jak wyświetlić wszystkie dokumenty Word znajdujące się na naszym komputerze: get-childitem C:\ ,D:\ -recurse -include *.doc 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 Zliczanie elementów - sumowanie. Czyli wyliczenie statystiki w postaci liczbowej poszczególnych rozszerzeń plików: get-childitem | group-object extension 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: Wlistowanie w trzech kolumnach zawartości katalogu Windows: Get-ChildItem C: | Sort-Object Name | Format-Wide FullName -Column 3 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 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 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"}}} 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"}}} 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" } } 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" } } 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 Odnośnik do komentarza
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 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: 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: 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: 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: 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 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 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: 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
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 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 ./ 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 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 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: 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: 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: 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: 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 " " } 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: 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: 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: 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 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
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 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). 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 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 PoshConsole 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 ShinyPower 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 Saipen - Windows PowerShell Help Tool 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 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 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 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. 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 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. Artykuł dostępny pod adresem: The Scripting Guys Answer Your Questions Odnośnik do komentarza
KolegaDudysa Opublikowano 27 Maja 2010 Autor Zgłoś Udostępnij Opublikowano 27 Maja 2010 MENU II Programy, skrypty, publikacje: PowerShell Script Generator Add In for Microsoft Office Visio 2007watch-folder (Monitorowanie zmian w folderze, PS 2.0 CTP3)Skróty klaiwaturowe w PowerShellOpen PowerShell in the current Explorer window (Vista)Searching PoshCode repository from your Desktop in Windows 7 Książki: Windows PowerShell. Podstawy (Holger Schwichtenberg, 2009-03-01, PL)Windows PowerShell 2.0 Administrator's Pocket Consultant (William R. Stanek, 2009-05-27, ENG)Effective 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 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 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 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 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 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 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 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ć. ****************************************************************** PowerGUI Tips & Tricks Videos23.01.2009 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 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 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 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 } Odnośnik do komentarza
Rekomendowane odpowiedzi