Foti Marcell PowerShell EMS

You might also like

You are on page 1of 20

Objektumorientált, .

net-alapú shell, de
Kis-nagybetű érzéketlen
Variant változók
Típushű objektumok, adatok
Command és Expression mód
Minden adat – collection
Távoli futtatás egyelőre nincs
Parancssor és PS-Analyzer
.PS1 fájlok
Ige-főnév
Get-Process, Get-Childitem, Get-Help
Stop-Service, Set-Location
A paramétereket mindig a shell dolgozza fel
Egységes formátum
Ha saját parancsot írunk, nem kell paraméterfeldolgozással
bíbelődni
Wildcard-ready: *, ?, []
Utasítás-zárójel: { }
Expression Mode: ()
Változók: $alma, $_
Egy sorban több parancs: ;
Konstansok (1kb, 2mb, 3gb)
Pipe: |
Get-Help (-e)
Parancsok, Aliasok, Helpek, Providerek
Get-Command (get-command | group noun)
Parancsok, Aliasok, függvények, alkalmazások
Get-Member (get-date | get-member)
(„asda”.Substring())
A lekérdezett objektumok összes metódusa és tulajdonsága
Get-PSDrive
Az összes provider, amit be lehet járni DIR-DURR
DIR Alias:
Kétbetűs aliasok (Set-Location, SL; Stop Process, SP)
SQL-jellegű aliasok (SELECT, WHERE)
Kompatibilitási aliasok (DIR, LS, CD)
Set-Location (CD)
Set-Location C:
CD HKLM:
SL Cert:
CHDIR Env:
Get-Childitem (DIR)
LS, DIR, GCI
Minden parancs objektumhalmazokkal dolgozik
1, 2, 3, 4
A halmazok tetszőleges és vegyes típusú elemeket
tartalmaznak
Get-Childitemnél fájlok+könyvtárak vegyesen
Dir ; 1, 2, 3, 4
A halmaz egyes elemeit Foreach-Object-tel lehet
egyesével kezelni
foreach {$_}
$_ a halmaz aktuális eleme (1..5 | foreach {“blabla$_"})
dir | foreach {$_.LastAccessTime - $_.LastWriteTime}
Munka objektumkupacokkal
Select-Object
Oszlopok kiválogatása (kivéve –first, -last)
Where-Object
Sorok kiválogatása {$_}
Sort-Object
Sorbarendezés
Összetett műveletek
Az öt legnagyobb olyan fájl, amit 2007-ben módosítottak
Group-Object
Tetszőleges property alapján
Measure-Object
Statisztika
Nyalánkságok
Fájlkezelés
Get-content, set-content
.net objektumok statikus metódusainak
meghívása
[névtér]::Metódus()
WMI-objektumok megszólítása
Get-wmiobject
PowerGadgets
Exchange 2003 (VBScript) E12 (PowerShell one-liner)
Mailbox
Statistics
Set listExchange_Mailboxs =
GetObject("winmgmts:{impersonationLevel=impersonate}!\\COMPUTERNAME\ROOT\MicrosoftExchangeV2").
InstancesOf("Exchange_Mailbox")
get-mailboxstatistics
For Each objExchange_Mailbox in listExchange_Mailboxs
–server $servername
WScript.echo "AssocContentCount =” + objExchange_Mailbox.AssocContentCount
WScript.echo " DateDiscoveredAbsentInDS =” + objExchange_Mailbox.DateDiscoveredAbsentInDS
WScript.echo " DeletedMessageSizeExtended =” + objExchange_Mailbox. DeletedMessageSizeExtended
WScript.echo " LastLoggedOnUserAccount =” + objExchange_Mailbox. LastLoggedOnUserAccount
WScript.echo " LastLogoffTime =” + objExchange_Mailbox. LastLogoffTime
WScript.echo " LastLogonTime =” + objExchange_Mailbox. LastLogonTime
WScript.echo " LegacyDN =” + objExchange_Mailbox. LegacyDN
WScript.echo " MailboxDisplayName =” + objExchange_Mailbox. MailboxDisplayName
WScript.echo " MailboxGUID =” + objExchange_Mailbox. MailboxGUID
WScript.echo " ServerName =” + objExchange_Mailbox. ServerName
WScript.echo " Size =” + objExchange_Mailbox. Size
WScript.echo " StorageGroupName =” + objExchange_Mailbox. StorageGroupName
WScript.echo " StorageLimitInfo =” + objExchange_Mailbox. StorageLimitInfo
WScript.echo " StoreName =” + objExchange_Mailbox. StoreName
WScript.echo " TotalItems =” + objExchange_Mailbox. TotalItems
Next

Database Dim StorGroup as New CDOEXM.StorageGroup


move-storagegrouppath
Mgmt
StorGroup.DataSource.Open "LDAP://" + DCServer + "/ CN=First Storage
Group,CN=InformationStore,CN=" + Server + ",CN=Servers,CN=First Administrative Group,
-identity “First Storage
CN=Administrative Groups,CN=First Organization, CN=Microsoft Exchange,CN=Services,
CN=Configuration," + DomainName Group“
StorGroup.MoveLogFiles("C:\newlogPath", 0)
–log "C:\newlogPath”

Recipient Dim objMailbox As CDOEXM.IMailboxStore


enable-mailbox
Mgmt
Set objMailbox = GetObject("LDAP://" + DCServer + "CN=FOO,CN=users," + DomainName) -identity domain\FOO
objMailbox.CreateMailbox "LDAP://" + DCServer + "/CN=Private MDB,CN=First Storage –database “First Storage
Group,CN=InformationStore,CN=" + Server + ",CN=Servers,CN=First Administrative Group,
CN=Administrative Groups,CN=First Organization, CN=Microsoft Exchange,CN=Services,
CN=Configuration," + DomainName
Group\Private MDB”
A cél a rendszergazdai feladatok egyszerűsítése
A „Task Model” a felügyeleti funkciók logikus
csoportosítása
A „task” vagy feladat egy elemi műveletet jelent
(pl. move a mailbox)
A feladatokat négy csoportba soroljuk:
Recipient management tasks
Organization management tasks
Server management tasks
Diagnostic Tasks
A feladatok tovább vannak bontva szerverszerepek
és funkciók szerint
Roles: Edge/Hub Transport, CAS, Mailbox, UM
Features: AntiSpam, Managed Email, Transport, Rules etc.
Az összesen 375 cmdlet teljesen lefeldi az
Exchange 2007 rendszerfelügyeletét
Kivételek: külső termékek által nyújtott szolgáltatások (IIS,
ADUC) és néhány őskövület.
Recipient management
Distribution group, DDG, Mailboxes, mail-enabled contacts,
users, Mailbox Policies, Email Address Policies
Organization settings
Transport Rules, Journaling, Routing, Filtering, Managed
Folders, Address Lists, OAB, Anti-Spam, ActiveSync, UM
Server settings
Storage group, mailbox and public folder databases, LCR /
HA, Virtual directories, SMTP connectors, POP, IMAP
Diagnostics
Queue management, test server health, connectivity, BPA
Súgórendszer
A help parancs segít a cmdletek és
kategóriák felderítésében
Get-help *User*
Get-help -role *UM*
Get-help –component *recipient*
További részletek...
Get-mailbox -? | more
Help remove-storagegroup
Lássuk, mit is adnak vissza az egyes
parancsok?
Get-Mailbox TestUser | format-list
Get-Mailbox TestUser | fl *quota*
A get-member a rendszergazda második
(vagy a harmadik?) legjobb barátja
Get-storagegroup TestSG | get-member
Az összes objektum egyedi azonosítóval (Identity) rendelkezik
(név, GUID vagy DN)
Két objektumcsoport van:
Singleton: egypéldányos jószágok
Multiple instance: jószág-csokrok, ahol az azonosító tesz különbséget
Az “Identity” az objektum létrehozásakor kap értéket
new-StorageGroup -name SG1 -server SERVER1
Innentől az Identityjével „találjuk fejbe”
set-StorageGroup SG1 -param1 arg1
Az Identityk láncából „útvonal” képezhető
URL: “ftp://server/container/resource.exe”
Identity: “container\resource1\resource2…”
get-MailboxDatabase “Mailbox Store”
get-Mailbox redmond\evand
remove-AddressList AddressList1\AddressList2
Így aztán nem kell állandóan a tartománynévre és egyéb irreleváns
adatokra hivatkozni!
Ha valakinek az „kényelmes”, az Identityt megadhatja GUID vagy DN
formátumban is
Egy parancs általában visszaadja az
összes objektumot, ezt a listát
szűrhetjük (kliens):
Get-TransportServer |
where { $_.MessageTrackingEnabled –eq
$false }
Dzsóker rulez
Get-Mailbox *joe*
Get-ExchangeServer *North*
Get-SendConnector *.hp.com
Egyes parancsok szerveroldali
szűréssel is rendelkeznek
Get-Mailbox -filter { DisplayName -like ‘*Test*’ }
Egyszerre egy sereg objektum feldolgozása
get-StorageGroup |
set-StorageGroup -param1 arg1 -param2 arg2

Ugyanazon főnéven belül a csövezés mindig


működik (cmd1 | cmd2)
Get-Mailbox redmond\evand | remove-mailbox

... és néha a szavakon túl is...


Get-Mailbox redmond\evand |
Test-MapiConnectivity

Ha nem megy a csövezés, használj


“ForEach” parancsot!
Get-ExchangeServer |
foreach { get-Storagegroup –server $_.Name }
1. Viselj világítós mellényt!
2. Használd a whatif, confirm, verbose kapcsolókat!
Az összes cmdlets (a get-* kivételével) tudja a –whatif-et
A „gyilkos” parancsok mindig kérdeznek!
Hibás/félresikerült objektumok kezelése:
Ha „hibás”, üzenetet kapunk
…ezt akár kódból mi magunk is ellenőrizhetjük

$object = Get-ELCMailboxPolicy ELCp1


if ( $object.IsValid –eq $false )
{
$whatsWrong = $object.Validate()
$whatsWrong | select-object
InvalidData,Description,PropertyDefinition
}

A set-* cmdletekkel gyógyítunk


$fixedObject | Set-ManagedFolder
Hát lássuk, értelmezzük!

Get-Mailbox -server E12admin | foreach


{ get-MailboxDatabase $_.Database } | group
Name

1..5 | foreach { new-storagegroup -name (“SG


$_”)
-server E12admin | new-mailboxdatabase “MB” }

Get-DistributionGroup newEmployees | get-


DistributionGroupMember | enable-mailbox
-database newDb1

Get-MessageTrackingLog -MessageSubject
"SomeTextFromTheSubject" | Group ClientIP |
Select Name | nslookup $_
param( [string]$server = $(read-host "Target server"))

new-storagegroup Congress -server $server | out-null


new-mailboxdatabase Senate -storagegroup exadmin-mbx-02\Congress |
mount-database
new-mailboxdatabase House -storagegroup exadmin-mbx-02\Congress |
mount-database
write-host "Databases created"

# get top user


$mbxset = (get-mailboxstatistics -server exadmin-mbx-01|
sort TotalItemCount -desc)[0..49]

$mbxset | foreach{ get-mailbox $_.LegacyDN } |


where {$_.Database -like "House*"} |
move-mailbox -targetdatabase $server\house | out-null

write-host "Representatives moved"

$mbxset | foreach{ get-mailbox $_.LegacyDN } |


where {$_.Database -like "Senate*"} |
move-mailbox -targetdatabase $server\Senate | out-null

write-host "Senators moved"


Exchange 2007 + PowerShell
Weblapok, Wiki-k, és Blogok
http://exchangeninjas.com
http://www.viveksharma.com/techlog/
http://www.msexchangeteam.com
http://blogs.technet.com/evand/
PowerShell Team Blog
http://blogs.technet.com/powershell/

You might also like