Seriál Windows PowerShell v3 – přechod z příkazové řádky (část 35.)

V jednom z předchozích dílů jsem zmiňoval, že pokud chcete s PowerShellem pracovat, je dobré jej používat co nejčastěji. Zkusíme se dnes podívat na některé časté operace, které jste možná byli zvyklí v příkazové řádce používat hodně často.

Active Directory

Pracovat v prostředí Windows a nepoužívat Active Directory je téměř nemožné. Hodně častou operací je vyhledávání počítačů nebo uživatelů. V prostředí příkazové řádky se používá příkaz dsquery. Tento příkaz můžeme nahradit několika cmdlety v PowerShellu.

Pokud chcete použít modul ActiveDirectory, nainstalujte si Remote Server Administration Tool (já budu instalovat verzi pro Windows 8). Tento nástroj (RSAT) je dostupný na https://www.microsoft.com/en-us/download/details.aspx?id=28972. Po instalaci budete mít zpřístupněno několik nových modulů, včetně toho pro Active Directory:

PS C:\> Get-Module -Name active* -ListAvailable

Directory: C:\Windows\system32\WindowsPowerShell\v1.0\Modules

ModuleType Name ExportedCommands
---------- ---- ----------------
Manifest ActiveDirectory {Add-ADCentralAccessPolicyMember, Add-DComputerServiceAccount, Add-A...

Jelikož se bavíme o dsget, pojďme se podívat, jaké cmdlety nám nabízí tento modul pro získávání informací:

CommandType Name
----------- ----
Cmdlet Get-ADAccountAuthorizationGroup
Cmdlet Get-ADAccountResultantPasswordReplicationPolicy
Cmdlet Get-ADCentralAccessPolicy
Cmdlet Get-ADCentralAccessRule
Cmdlet Get-ADClaimTransformPolicy
Cmdlet Get-ADClaimType
Cmdlet Get-ADComputer
Cmdlet Get-ADComputerServiceAccount
Cmdlet Get-ADDCCloningExcludedApplicationList
Cmdlet Get-ADDefaultDomainPasswordPolicy
Cmdlet Get-ADDomain
Cmdlet Get-ADDomainController
Cmdlet Get-ADDomainControllerPasswordReplicationPolicy
Cmdlet Get-ADDomainControllerPasswordReplicationPolicyUsage
Cmdlet Get-ADFineGrainedPasswordPolicy
Cmdlet Get-ADFineGrainedPasswordPolicySubject
Cmdlet Get-ADForest
Cmdlet Get-ADGroup
Cmdlet Get-ADGroupMember
Cmdlet Get-ADObject
Cmdlet Get-ADOptionalFeature
Cmdlet Get-ADOrganizationalUnit
Cmdlet Get-ADPrincipalGroupMembership
Cmdlet Get-ADReplicationAttributeMetadata
Cmdlet Get-ADReplicationConnection
Cmdlet Get-ADReplicationFailure
Cmdlet Get-ADReplicationPartnerMetadata
Cmdlet Get-ADReplicationQueueOperation
Cmdlet Get-ADReplicationSite
Cmdlet Get-ADReplicationSiteLink
Cmdlet Get-ADReplicationSiteLinkBridge
Cmdlet Get-ADReplicationSubnet
Cmdlet Get-ADReplicationUpToDatenessVectorTable
Cmdlet Get-ADResourceProperty
Cmdlet Get-ADResourcePropertyList
Cmdlet Get-ADResourcePropertyValueType
Cmdlet Get-ADRootDSE
Cmdlet Get-ADServiceAccount
Cmdlet Get-ADTrust
Cmdlet Get-ADUser
Cmdlet Get-ADUserResultantPasswordPolicy

Opět bychom si měli uvědomit jedno ze základních pravidel PowerShellu – Verb-Noun. První část jména cmdletu určuje akci, druhá říká, nad kterým objektem chceme operovat. Pro dsget sáhneme nejčastěji zřejmě při zjišťování informací o uživatelích, skupinách a počítačích. Čemuž odpovídají tři cmdlety:

  • Get-ADUser
  • Get-ADGroup
  • Get-AdComputer

Například úplně jednoduchý dotaz na členství počítače v konkrétní organizační jednotce:

PS C:\> dsquery computer domainroot -name mujnb
"CN=MUJNB,CN=Computers,DC=mydom,DC=local"

Můžeme získat jednoduše v PowerShellu takto:

PS C:\> Get-ADComputer mujnb

DistinguishedName : CN=MUJNB,CN=Computers,DC=mydom,DC=local
DNSHostName : MUJNB.mydom.local
Enabled : True
Name : MUJNB
ObjectClass : computer
ObjectGUID : e7xxxxxx-yyyy-4da7-9398-1234568
SamAccountName : MUJNB$
SID : S-1-5-21-3165774027-4396
UserPrincipalName :

To samé bychom mohli provést pro zmiňované uživatele nebo skupiny.

Důležité je si uvědomit, že v PowerShellu získáváme objekty, se kterými můžeme dále pracovat v rouře. A i když jsme schopni předat data z dsget také do roury, přece jen je objektové pojetí PowerShellu daleko flexibilnější (příklad práce dsget v rouře je dostupná v nápovědě).

Další skupinou často používaných přikazů jsou ty, určené pro vytváření objektů, zde zastoupené příkazem dsadd. V PowerShellu si můžeme zkontrolovat cmdlety New-AD*:

PS C:\> Get-Command -Module ActiveDirectory -Verb New | Format-Wide -Column 3

New-ADCentralAccessPolicy New-ADCentralAccessRule New-ADClaimTransformPolicy
New-ADClaimType New-ADComputer New-ADDCCloneConfigFile
New-ADFineGrainedPasswordPolicy New-ADGroup New-ADObject
New-ADOrganizationalUnit New-ADReplicationSite New-ADReplicationSiteLink
New-ADReplicationSiteLinkBridge New-ADReplicationSubnet New-ADResourceProperty
New-ADResourcePropertyList New-ADServiceAccount New-ADUser

A stejný princip bychom mohli použít pro modifikaci objektů v Active Directory. Příkaz dsmod můžeme nahradit cmdlety, které mají Verb = Set (seznam cmdletů si již dokážete určitě zobrazit sami).

Při zjišťování nastavení počítačů v doméně jsou častými příkazy gpupdate a gpresult. Ve Windows Serveru 2012 se objevily některé nové cmdlety a jedním z nich je Invoke-GPUpdate. Náhrada za gpresult byla již v předchozí verzi serveru, jedná se o Get-GPResultantSetOfPolicy.

Mimochodem – modul GroupPolicy obsahuje nyní 28 cmdletů a velice podrobně pokrývá oblast skupinových politik. Jedná se určitě o další modul vhodný k prozkoumání:

PS C:\> gcm -Module GroupPolicy | fw -c 3

Get-GPPermissions Set-GPPermissions Backup-GPO
Copy-GPO Get-GPInheritance Get-GPO
Get-GPOReport Get-GPPermission Get-GPPrefRegistryValue
Get-GPRegistryValue Get-GPResultantSetOfPolicy Get-GPStarterGPO
Import-GPO Invoke-GPUpdate New-GPLink
New-GPO New-GPStarterGPO Remove-GPLink
Remove-GPO Remove-GPPrefRegistryValue Remove-GPRegistryValue
Rename-GPO Restore-GPO Set-GPInheritance
Set-GPLink Set-GPPermission Set-GPPrefRegistryValue
Set-GPRegistryValue

Ping, ipconfig, nslookup

Tyto tři příkazy patří určitě mezi nejvíce používané při práci administrátora. O pingu jsem již psal v jednom z předchozím dílů a dnes bych rád ukázal náhradu zbývajících dvou.

Pro ipconfig máme náhradu ve několika cmdletech, v závislosti na použitém přepínači. Pro přehlednost si je ukážeme v tabulce.

Ipconfig /all

Get-NetIPConfiguration –Detailed

Ipconfig /flushdns

Clear-DnsClientCache

Ipconfig /displaydns

Get-DnsClientCache

Ipconfig /registerdns

Register-DnsClient

Pro náhradu za nslookup lze použít cmdlet z modulu DnsClient, zkuste si tipnout který z následujících:

PS C:\> gcm -m DnsClient | fw -c 3

Add-DnsClientNrptRule Clear-DnsClientCache Get-DnsClient
Get-DnsClientCache Get-DnsClientGlobalSetting Get-DnsClientNrptGlobal
Get-DnsClientNrptPolicy Get-DnsClientNrptRule Get-DnsClientServerAddress
Register-DnsClient Remove-DnsClientNrptRule Set-DnsClient
Set-DnsClientGlobalSetting Set-DnsClientNrptGlobal Set-DnsClientNrptRule
Set-DnsClientServerAddress Resolve-DnsName

Pokud jste zkusili poslední z vypsaných, máte pravdu. Použití je pak opravdu jednoduché:

PS C:\> Resolve-DnsName www.microsoft.cz

Name Type TTL Section NameHost
---- ---- --- ------- --------
www.microsoft.cz CNAME 3221 Answer websrv1.microsoft.cz

Name : websrv1.microsoft.cz
QueryType : A
TTL : 3221
Section : Answer
IP4Address : 93.99.58.66

Name : microsoft.cz
QueryType : SOA
TTL : 3221
Section : Authority
NameAdministrator : msnhst.microsoft.com
SerialNumber : 2010120201
TimeToZoneRefresh : 1800
TimeToZoneFailureRetry : 900
TimeToExpiration : 2419200
DefaultTTL : 3600

Všimněte si, že výsledkem jsou tři různé typy objektů – záznamy pro PTR, A, SOA. Pokud chcete pouze určitý záznam, můžete jej uvést v parametru Type.

A na závěr malý úkol do příštího dílu: Zkuste najít cmdlet, který byste použili místo tracert. Pokud jej správně vyřešíte, můžete se těšit na malou odměnuVeselý obličej

Dnes jsme se lehce dotkli oblasti, která je z mého pohledu velice důležitá – zkusit najít a používat cmdlety v situacích, kdy naše prsty automaticky sahají po starých příkazech. Opět chci připomenout starou pravdu: Když to funguje, nesahej na to. Ovšem v některých případech také platí: Pokrok nezastavíšVeselý obličej

- David Moravec, MVP