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

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