1 Programowanie Aplikacji Lokalnych .NETWMI
2 Co to jest WMI: Komponenty Windows które zapewniają ujednolicony interfejs do zarządzania danymi MS-owa implementacja Desktop Management Task Force's Web Based Enterprise Management
3
4 Powody użycia WMI: Działa zdalnie i lokalnieŁatwy ujednolicony interfejs Dostępny z PSH i jezykow skryptowych Monitorowanie stanu systemu i aplikacji Zarządzanie i konfiguracja aplikacji Ujednolicony dostęp do danych i operacji na nich Automatyzacja lokalnych i zdalnych operacji administracyjnych
5 Hierarchia: Namespace Class Property Method Static Methot EventRoot\CimV2 Class Win32_Share Property Name, Path Method Delete Static Methot Create Event
6 Narzędzia WMI Explorer WBEMTest Starsze: WMITools.exe VS WMICCIM Studio, Object browser, Event viewer, Event registration VS WMIC Języki skryptowe Js/VB Powershell Scriptomatic2.exe
7 Windows Management Instrumentation
8 WMI przykład skryptu w JSvar ServiceSet = GetObject( "winmgmts:{impersonationLevel=impersonate}"). InstancesOf("Win32_Service"); for (e = new Enumerator(ServiceSet); !e.atEnd(); e.moveNext()) { WScript.Echo( e.item().Description ); }
9 WMI przykład skryptu w VBSet ServiceSet = GetObject( "winmgmts:{impersonationLevel=impersonate}"). InstancesOf("Win32_Service") for each Service in ServiceSet WScript.Echo Service.Description Next
10 WMI tryb pracy tryb okienkowy: tryb commandline-owy:wscript //h:wscript tryb commandline-owy: cscript //h:cscript
11 .NET vs WMI Namespace: System.Management.InstrumentationInstrumentedAttribute InstrumentationClassAttribute Instance BaseEvent DefaultManagementProjectInstaller, ManagementInstaller
12 Power Shell
13 włączony jako część releasuXP SP3, Server 2003 Sp2, Vista SP1 Windows 2008R2 Server, W7 MSSQL 2008 PowerShell v. 1 -> November 2006 PowerShell v. 5 -> December 2015
14 Power Shell interaktywne środowisko PowerShell, PowerShell ISEmożliwość hostowania w aplikacji Rozszerzalny system typów, możliwość korzystania z .NET, COM, WMI możliwość operwania na obiektach i napisach, zunifikowane formatowanie, przekierowywanie wyników definiowanie własnych funkcji, aliasów możliwość utrwalenia środowiska - za pośrednictwem profilu
15 PSh - Podstawowe koncepcjecmdlet : Get-, Set-, Out-, Start-, Stop-, Restart-, Add- ... Help, Command, Service, Computer, ChildItems ... get-service get-service –name *sched* get-service *sched* get-service *sched* | format-table get-service *sched* | format-list Name : Schedule DisplayName : Task Scheduler Status : Running DependentServices : {} ServicesDependedOn : {RpcSs} CanPauseAndContinue : True CanShutdown : True CanStop : True ServiceType : Win32ShareProcess, InteractiveProcess
16 PSh - dokumentacja get-command –verb "get" get-command –noun "service„help execution Get-help about_Execution_Policies
17 PSh - dokumentacja get-help get-help get-serviceget-help get-service –detailed get-help get-service –parameter *excl* get-help get-service –examples get-help about_assignment_operators get-help about* Get-ChildItem ? Get-Command -Name Get-ChildItem -Syntax
18 PSh - dokumentacja get-service *sched* | get-memberTypeName: System.ServiceProcess.ServiceController Name MemberType Definition Name AliasProperty Name = ServiceName add_Disposed Method System.Void add_Disposed(EventHandle... Close Method System.Void Close() Continue Method System.Void Continue() CreateObjRef Method System.Runtime.Remoting.ObjRef Creat... ...
19 PSh – ALIASY Alias może dotyczyć: polecenia, funkcji, atrybutu, instrukcji Np.: dir, pwd get-help, man, help get-alias get-alias | where-object {$_.definition -eq "set-location"} CommandType Name Definition Alias ac Add-Content Alias asnp Add-PSSnapin Alias clc Clear-Content Alias cli Clear-Item Alias clp Clear-ItemProperty Alias clv Clear-Variable Alias cpi Copy-Item ... CommandType Name Definition Alias sl Set-Location Alias cd Set-Location Alias chdir Set-Location
20 PSh – Modyfikowanie aliasówDodawanie: set-alias gh get-help set-alias np c:\windows\notepad.exe Usuwanie: remove-item alias:ls Alias nie obejmuje parametrów – mozna jednak zdefiniować własną funkcję: function bootini {notepad c:\boot.ini} Sprawdzenie aliasu Get-Alias dir
21 PSh - formatowanie format-list [property pattern]format-table [property pattern] [-GroupBy attribute] format-custom format-wide get-service *sched* | format-table -property *name* Name DisplayName MachineName ServiceName Schedule Task Scheduler Schedule
22 PSh – odwołania do obiektówwłasności i funkcje:
23 PSh – przekierowywaniepolecenie > plik | more Out-File -FilePath my_file Out-Null Out-Printer
24 PSh – polecenia cmdlety get-command zewnętrzne: zabezpieczenia:c:\test.ps1 dir c:\ | format-table -property name,creationtime notepad.exe zabezpieczenia: polityka uruchamiania: Get-Executionpolicy Set-ExecutionPolicy Unrestricted podpis cyfrowy: get-help about_signing
25 PSh – polecenia Dostępne moduły Get-PSSnapin Get-PSSnapin –RegisteredZaładowanie modułów Add-PSSnapin Sql*
26 PSh – profil test istnienia profilu: test-path $profiletworzenie profilu użytkownika: new-item -path $profile -itemtype file -force user\My Documents\WindowsPowerShell\Microsoft. PowerShell_profile.ps1 edycja: notepad $profile alias do edycji: function pro { notepad $profile }
27 PSh – profile profil dla wszystkich użytkowników i shell-i:%windir%\system32\WindowsPowerShell\v1.0\profile.ps1 profil dla wszystkich użytkowników powerShella: %windir%\system32\WindowsPowerShell\v1.0\ Microsoft.PowerShell_profile.ps1 profil dla wszystkich shell-i bieżącego użytkownika %UserProfile%\My Documents\WindowsPowerShell\profile.ps1 profil dla MS Power Shell i bieżącego użytkownika %UserProfile%\\My Documents\WindowsPowerShell\ Microsoft.PowerShell_profile.ps1
28 PSh – drives get-psdriveName Provider Root A FileSystem A:\ Alias Alias C FileSystem C:\ cert Certificate \ D FileSystem D:\ E FileSystem E:\ Env Environment F FileSystem F:\ Function Function G FileSystem G:\ HKCU Registry HKEY_CURRENT_USER HKLM Registry HKEY_LOCAL_MACHINE S FileSystem S:\ Variable Variable
29 PSh – drives dir c: Get-ChildItem d: Get-ChildItem function:dir variable: New-PSDrive -Name Office –PSProvider FileSystem -Root "C:\Program Files\Microsoft Office\OFFICE11”
30 PSh – operacje na elementachGet-ChildItem -Path C:\Windows\*.dll –Recurse -Exclude [a-y]*.dll New-Item -Path c:\temp\New.Directory -ItemType Directory Remove-Item C:\New.Directory Rename-Item –Path C:\temp\New.Directory\ file1.txt fileOne.txt Move-Item -Path C:\temp\New.Directory -Destination C:\ -PassThru
31 PSh vs WMI Lista klas WMI:Get-WmiObject -List Get-WmiObject -List -ComputerName Get-WmiObject -Class Win32_OperatingSystem -Namespace root/cimv2 SystemDirectory : C:\WINDOWS\system32 Organization : PG BuildNumber : 2600 RegisteredUser : KM SerialNumber : Version :
32 Wszystkie commandlety WMIGet-WmiObject Invoke-WmiMethod Remove-WmiObject Register-WmiEvent Set-WmiInstanc Wmi to obiekty COM zawiniete we wrapery .Net System.Management.ManagementObject System.Management.ManagementClass System.Management.ManagementObjectsearcher
33 PSh vs .NET New-Object –TypeName System.Diagnostics.EventLogNew-Object –TypeName System.Diagnostics. EventLog –ArgumentList Application $AppLog = New-Object –TypeName System.Diagnostics.EventLog –ArgumentList Application $AppLog.Clear()
34 PSh vs .COM $WshShell = New-Object –ComObject WScript.Shell$lnk = $WshShell.CreateShortcut ("$Home\Desktop\PSHome.lnk") $lnk.TargetPath = $PSHome $lnk.Save() $ie = New-Object -ComObject InternetExplorer.Application $ie.Visible = $true $ie.Navigate("http://www.microsoft.com /technet/scriptcenter/default.mspx") $ie.Document.Body.InnerText | more $ie.Quit()
35 PSh vs. static statyczna klasa - System.Environment[System.Environment] | Get-Member [System.Environment] | Get-Member –Static [System.Environment]::Commandline [System.Math]::Sqrt(9)
36 PSh - filtrowanie FilterScript:1,2,3,4 | Where-Object -FilterScript {$_ -lt 3} 1 2 operatory: -eq, -ne, -lt, -le, -gt, -ge, -like, -notlike, -contains, -notcontains Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript {$_.State -eq "Running"}
37 PSh – zmienne Deklaracja: $a = “abc” Typy dotnetowe. $a.GetType()Nie maja stałego typu $a = 5 Można wymusić typ przy deklaracji [System.Int32]$i = 5 .Net – oznacza pełny zestaw możliwości np:. “to text”.ToUpper().Contains(“TE”) Wypisywanie na konsole. $t Write-Host “t:’ $t
38 PSh – zmienne Operatory -lt, -gt, -eq, -le, -ge, -ne-Like, -NotLike, -Match, -NotMatch “abcde” -Like “a*e” “abcde” -Like “a*[b-d]e” Konwersja (prawy typ jest konwertowany do lewego) “042” –eq 42 42 –eq “042”
39 PSh – zmienne Operacje wykonywane na wybranych obiektach:Get-Command -Noun Variable | Format-Table -Property Name,Definition -AutoSize -Wrap Clear-Variable Get-Variable New-Variable Remove-Variable Set-Variable Np.: $w = 3 New-Variable –Name “w” –Value 3 Czyszczenie wszystkich zmiennych: Remove-Variable -Name * -Force -ErrorAction SilentlyContinue
40 PSh – napisy ‘ i “ można zagnieżdzać ”to ’tekst’”Działa teź podwójne użycie ’to ’’tekst’’’ Escapowanie znaków przez prawy apostrof ` ’pierwsza linia`ndruga linia’ Długie teksty @”linia Linia Interpolacja (wymaga “) “tekst $tekst $(1+2)” Formatowanie jak w .Net “tekst {0} {1:0.00}” –f $t, 1/3
41 PSh – tablice Pusta tablica Tablice są indeksowane od 0,Tablice można tworzyc przez przypisywanie elemetntów $a = 1,2,3,4 $a $a = 1..4 Pusta tablica $a = () Tablice są indeksowane od 0, $a[0] Operatory na tablicach -Contains, -NotContains $a –Contains 3
42 PSh – hashe Składnia “obiektowa” InneHashe można tworzyc przez przypisywanie elemetntów $hash $hash[“key3”] = 114 Składnia “obiektowa” $k = "key4" | $hash."key3" $hash.$k | $hash.$($k) $hash.$("key"+"3") Inne $hash.Remove("key3") $hash.Contains("key3")|$hash -Contains("key3") $hash.ContainsValue(114) $hash.“key3” = 114
43 PSh – wbudowane zmienne$true $false $null $pwd $Home $host $PID $PSVersionTable $_ $hash.“key3” = 114
44 PSh – środowisko cmd.exelistowanie: Get-ChildItem env: $env:SystemRoot
45 PSh - warunek Clear-Host $test = “abc” if($test –eq “abc”) {“if active” } else “else active”
46 PSh - switch Clear-Host $test = "abc" switch($test) {"a" { "result a" } 12 { "result 12" } "12" { "result 12" } "abc" { "result abc" } default { "default" } } Uwaga: 12 zostanie znalezione 2x, aby temu zapobiec należy zastosować { "result 12"; break }
47 PSh - switch Switch można wykonać dla kolekcji switch("abc",12,"a",7){ "a" { "result a" } 12 { "result 12" } "12" { "result 12" } "abc" { "result abc" } default { "default" } } porownania są domyślnie case insensitive switch –casesensitive("abc") { } switch –wildcards("abc") { }
48 PSh - while, do while, do untilwhile($i –le 6) { "`$i = $i" $i ++ } do } while($i –le 6)
49 PSh - for $i=0 for(; $f –le 3; $i++) { "`$i = $i" }for($i=0; $f –le 3; $i++) Dostępne są również: break, continue
50 PSh - foreach foreach($item in 11..13) { “`$item = $item” }Set-Location "e:\" foreach($file in Get-ChildItem) if ($file.Name –like "*.exe"){ $file.Name
51 PSh - bloki Definicja { Clear-Host; "hello from block" }$b = { Clear-Host; "hello from block" } uruchomienie & { Clear-Host; "hello from block" } & $b Odbiór wartości $b = { 1+5 } $w = 3 + & $b
52 PSh - bloki Przekazanie parametrów & { $args[0]+$args[1] } 2 7& { param($p1,$p2); $p1+$p2 } 2 7 Parametry nazwane & { param($p1,$p2); $p1+$p2 } –p1 2 –p2 7 Weryfikacja czy podano parametr if (!$p1) Domyślne wartości param($p1,$p2=7) Silne typowanie param([int]$p1,[int]$p2=7)
53 PSh – bloki + potoki $filterFiles = { begin { $ret = “result:” }process { if ($_.Name –like “*.exe”) { $ret = $ret + “`t” + $_.Name +”`r`n” } } end { return $ret } Get-ChildItem | &filterFiles
54 PSh – bloki + potoki + parametry$filterFiles = { param ($mask) begin { $ret = “result:” } process { if ($_.Name –like $mask) { $ret = $ret + “`t” + $_.Name +”`r`n” } } end { return $ret } Get-ChildItem | &filterFiles “*.exe”
55 PSh – zasięg zmiennych Zmienne zdefiniowane w bloku slokalneZmienne są przesłaniane, ale można się dostać do przesłoniętych przez Get/Set-Variable z parametrem -scope $v = 10 &{ $v = 5 Write-Host “inside $v” Write-Host “same “ (Get-Variable v –valueOnly -scope 0) Write-Host “parent “ (Get-Variable v –valueOnly -scope 1) } Write-Host “outside $v”
56 PSh – Funkcje Funkcja to blok z nazwi parametrami w nagłówkufunction TestMask ($name, $mask) { if ($name –like $mask) Write-Host “$name matches $mask” } TestMask “abc” “a??”
57 PSh – Funkcje + potoki Function FilterFiles ($mask) {begin { $ret = “result:” } process { if ($_.Name –like $mask) { $ret = $ret + “`t” + $_.Name +”`r`n” } } end { return $ret } Get-ChildItem | FilterFiles “*.exe”
58 PSh – Funkcje + parametry refFunction TestRef([ref] $var) { $var.Value = 100 } $v = 5 TestRef ([ref] $v) $v
59 PSh – Filtry Function FilterExeFiles() { if ($_.Name –like “*.exe”) {Brak składania wyniku, Zwracane są poszcze- gólne obiekty Function FilterExeFiles() { if ($_.Name –like “*.exe”) { return $_ } Get-ChildItem | FilterExeFiles
60 PSh - filtrowanie cd Get-WmiObject -Class Win32_SystemDriver | Where-Object -FilterScript { ($_.State -eq "Running") -and ($_.StartMode -eq "Manual") } | Format-Table -Property Name,DisplayName Operatory: -and, -or, -not, !
61 PSh - teksty 7: Split The split operator splits a text string based on a character you designate. For example, suppose that you want to break a sentence into an array consisting of each individual word in the sentence. You could do so by using a command like this one: "This is a test" -split " " The result would look like this: This is a test 8: Join Just as split can split a text string into multiple pieces, the join operator can combine multiple blocks of text into one. For example, this line will create a text string consisting of my first name and last name: "Brien","Posey" -join " " The space between the quotation marks at the end of the command tells Windows to insert a space between the two text strings.
62 PSh – przetwarzanie obiektówOperacje wykonywane na wybranych obiektach: Get-WmiObject -Class Win32_LogicalDisk | ForEach-Object -Process {($_.FreeSpace)/1024.0/1024.0} Sortowanie: Get-WmiObject -Class Win32_SystemDriver | Sort-Object -Property State,Name -Descending | Format-Table -Property Name,State,Started,DisplayName -AutoSize -Wrap
63 PSh – przykłady listowanie: zamykanie procesów o określonych nazwach:Get-Process -Id 99 Get-Process -Name explore Get-Process –Name ex* Get-Process -Name exp*,power*,NotAProcess zamykanie procesów o określonych nazwach: Stop-Process -Name t*,e* -Confirm zamykanie nieodpowiadajacych procesów: Get-Process | Where-Object -FilterScript {$_.Responding -eq $false} | Stop-Process zamykanie procesów z innej sesji: Get-Process -Name BadApp | Where-Object -FilterScript {$_.SessionId -neq 0} | Stop-Process zamykanie innych PSh: Get-Process -Name powershell | Where-Object -FilterScript {$_.Id -ne $PID} | Stop-Process –PassThru
64 PSh – przykłady Powolne scrollowanie:function EasyView { process { $_; Start-Sleep -seconds 0.6} } Get-ChildItem | EasyView Listowanie urezadzen usb (via WMI) gwmi Win32_USBControllerDevice -computername localhost |fl Antecedent,Dependen
65 Hostowanie Power Shell-a
66 PSh – linki https://msdn.microsoft.com/en-us/powershell/mt173057.aspxhttps://technet.microsoft.com/en-us/scriptcenter/dd aspx https://www.powershellgallery.com/ BLOGI: https://blogs.msdn.microsoft.com/powershell/ NARZEDZIA: