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 http://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