Contents of this directory is archived and no longer updated.

Всем желающим уже давно доступна для скачивания клиентская версия Windows 8 (Windows Developer Preview downloads), а подписчикам MSDN доступна и серверная версия — Windows Server 8. Я не буду говорить про все новшества новых систем, потому что мой бложек не выдержит столько ненависти в адрес Microsoft. Но как минимум одна вещь доставляет позитива — Windows PowerShell 3.0 и модули.

Возьмём некоторый типовой Windows Server 2008 R2 и посмотрим на встроенные модули, которые доступны «искаропки»:

PS C:\> (Get-Module -ListAvailable).Count
7
PS C:\> Get-Module -ListAvailable

ModuleType Name                      ExportedCommands
---------- ----                      ----------------
Manifest   ADRMS                     {}
Manifest   AppLocker                 {}
Manifest   BestPractices             {}
Manifest   BitsTransfer              {}
Manifest   PSDiagnostics             {}
Manifest   ServerManager             {}
Manifest   TroubleshootingPack       {}


PS C:\>

совсем не густо — только 7 штук. А вот список модулей в Windows Server 8:

PS C:\> (Get-Module -ListAvailable).Count
62
PS C:\> Get-Module -ListAvailable


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


ModuleType Name                      ExportedCommands
---------- ----                      ----------------
Manifest   ActiveDirectory           {Get-ADRootDSE, New-ADObject, Rename-ADObject, Move-ADObject...}
Manifest   ADDeploymentWF            Invoke-ADCommand
Manifest   ADDSDeployment            {Add-ADDSReadOnlyDomainControllerAccount, Install-ADDSForest, Install-AD...
Manifest   AppLocker                 {Set-AppLockerPolicy, Get-AppLockerPolicy, Test-AppLockerPolicy, Get-App...
Manifest   Appx                      {Add-AppxPackage, Get-AppxPackageManifest, Get-AppxPackage, Remove-AppxP...
Manifest   BestPractices             {Get-BpaModel, Invoke-BpaModel, Get-BpaResult, Set-BpaResult}
Manifest   BitsTransfer              {Add-BitsFile, Remove-BitsTransfer, Complete-BitsTransfer, Get-BitsTrans...
Manifest   BranchCache               {Add-BCDataCacheExtension, Clear-BCCache, Disable-BC, Disable-BCDowngrad...
Manifest   CertificateServicesCmd... {Get-AdcsCertificationAuthorityConfigurationDefaults, Get-AdcsConfigurat...
Manifest   CimCmdlets                {Get-CimInstance, Get-CimSession, New-CimSession, New-CimSessionOption...}
Manifest   ClusterAwareUpdating      {Get-CauPlugin, Register-CauPlugin, Unregister-CauPlugin, Invoke-CauScan...
Manifest   DirectAccessClientComp... {Get-DASiteTableEntry, Set-DASiteTableEntry, Remove-DASiteTableEntry, Re...
Manifest   Dism                      Apply-Unattend
Manifest   DnsClient                 {Resolve-DnsName, Get-DNSClient, Set-DNSClient, Get-DNSClientCache...}
Manifest   DnsConfig                 {Get-DNSClient, Set-DNSClient, Get-DNSClientCache, Clear-DNSClientCache...}
Binary     DnsLookup                 Resolve-DnsName
Manifest   DnsNrpt                   {Get-DnsClientEffectiveNrptPolicy, Get-DnsClientNrptGlobal, Set-DnsClien...
Manifest   DnsServer                 {Clear-DnsServerCache, Get-DnsServerCache, Set-DnsServerCache, Show-DnsS...
Manifest   FailoverClusters          {Add-ClusterCheckpoint, Add-ClusterDisk, Add-ClusterFileServerRole, Add-...
Manifest   FileServer                {Get-SmbShareWF, Get-FsrmQuotaWF, Get-IscsiServerTargetWF, Get-IscsiVirt...
Manifest   GroupPolicy               {Backup-GPO, Copy-GPO, Get-GPInheritance, Get-GPO...}
Manifest   iSCSI                     {Connect-iSCSIDiscoveredTarget, Disconnect-iSCSIDiscoveredTarget, Get-iS...
Manifest   KdsCmdlets                {Get-KdsRootKey, Add-KdsRootKey, Test-KdsRootKey, Get-KdsConfiguration...}
Manifest   Microsoft.PowerShell.Core {Get-Command, Get-Help, Update-Help, Save-Help...}
Manifest   Microsoft.PowerShell.D... {Get-WinEvent, Get-Counter, Import-Counter, Export-Counter...}
Manifest   Microsoft.PowerShell.Host {Start-Transcript, Stop-Transcript}
Manifest   Microsoft.PowerShell.M... {Add-Content, Clear-Content, Clear-ItemProperty, Join-Path...}
Manifest   Microsoft.PowerShell.S... {Get-Acl, Set-Acl, Get-PfxCertificate, Get-Credential...}
Manifest   Microsoft.PowerShell.U... {Format-List, Format-Custom, Format-Table, Format-Wide...}
Manifest   Microsoft.WSMan.Manage... {Disable-WSManCredSSP, Enable-WSManCredSSP, Get-WSManCredSSP, Set-WSManQ...
Manifest   MicrosoftiSCSITarget      {Add-IscsiVirtualDiskTargetMapping, Checkpoint-IscsiVirtualDisk, Dismoun...
Manifest   MsDtc                     {New-DtcDiagnosticTransaction, Complete-DtcDiagnosticTransaction, Join-D...
Manifest   NetAdapter                {Rename-NetAdapter, Set-NetAdapter, Get-NetAdapter, Enable-NetAdapter...}
Manifest   NetLbfo                   {Get-NetLbfoTeam, Remove-NetLbfoTeam, Set-NetLbfoTeam, New-NetLbfoTeam...}
Manifest   NetQos                    {Get-NetQosPolicy, Set-NetQosPolicy, Remove-NetQosPolicy, New-NetQosPolicy}
Manifest   NetSwitchTeam             {Get-NetSwitchTeam, Remove-NetSwitchTeam, New-NetSwitchTeam, Rename-NetS...
Manifest   NetTCPIP                  {Get-NetIPAddress, Set-NetIPAddress, Remove-NetIPAddress, New-NetIPAddre...
Manifest   netwnv                    {New-NetVirtualizationAddress, Get-NetVirtualizationAddress, Remove-NetV...
Manifest   NetworkConnectivityStatus {Get-DAConnectionStatus, Get-NCSIPolicyConfiguration, Set-NCSIPolicyConf...
Manifest   NetworkSecurity           {New-NetAuthenticationProposal, New-NetMainModeCryptoProposal, New-NetQu...
Manifest   NetworkTransition         {Get-Net6to4Configuration, Set-Net6to4Configuration, Reset-Net6to4Config...
Script     PKI
Manifest   PKIClient                 {Get-AutoEnrollmentPolicy, Set-AutoEnrollmentPolicy, Export-Certificate,...
Manifest   PrintManagement           {Get-Printer, Remove-Printer, Set-Printer, Add-Printer...}
Manifest   PS_MMAgent                {Disable-MMAgent, Enable-MMAgent, Set-MMAgent}
Manifest   PSDiagnostics             {Start-Trace, Stop-Trace, Enable-WSManTrace, Disable-WSManTrace...}
Manifest   PSScheduledJob            {New-JobTrigger, Add-JobTrigger, Remove-JobTrigger, Get-JobTrigger...}
Manifest   PSWorkflow                {Import-PSWorkflow, New-PSWorkflowExecutionOption}
Manifest   RDManagement              {Grant-OrgUnitAccess, Test-OrgUnitAccess, Restart-ComputersAndBlock, Exp...
Manifest   ScheduledTasks            {New-JobTrigger, Add-JobTrigger, Remove-JobTrigger, Get-JobTrigger...}
Manifest   SecureBoot                {Confirm-SecureBootUEFI, Set-SecureBootUEFI, Get-SecureBootUEFI, Format-...
Manifest   ServerManager             {Add-WindowsFeature, Remove-WindowsFeature}
Manifest   ServerManagerShell        {WFAddRemoveServerComponentAsync, WFGetAlterationState, WFGetGuid, WFGet...
Manifest   SmbShare                  {Get-SmbShare, Remove-SmbShare, Set-SmbShare, Block-SmbShareAccess...}
Manifest   SmbWitness                {Get-SmbWitnessCluster, Get-SmbWitnessClusterClient, Move-SmbWitnessClus...
Manifest   Storage                   {Add-InitiatorIdToMaskingSet, Add-PartitionAccessPath, Add-PhysicalDisk,...
Manifest   TelemetryManagement       {Set-CEIP, Set-WER}
Manifest   TroubleshootingPack       {Get-TroubleshootingPack, Invoke-TroubleshootingPack}
Manifest   TrustedPlatformModule     {Get-Tpm, Initialize-Tpm, Clear-Tpm, Unblock-Tpm...}
Manifest   UserAccessLogging         {Enable-Ual, Disable-Ual, Get-Ual, Get-UalDhcp...}
Manifest   Wdac                      {Get-OdbcDriver, Set-OdbcDriver, Get-OdbcDsn, Add-OdbcDsn...}
Manifest   Whea                      {Get-WheaMemoryPolicy, Set-WheaMemoryPolicy}


PS C:\>

61 модуль!!!!1111одинодин (мой PKI модуль не в счёт). И это не считая тех, которые устанавливаются вместе с ролями сервера (как, например, модуль ServerBackup). Конкретно сейчас говорить об их возможностях ещё рано, потому что они функционально пока не готовы. Но мы можем представить себе, что это всё дружно заработает ближе к RTM. Из наиболее интересных вещей хочется обрать внимание на вот какие модули:

  • SmbShare
PS C:\> gcm -Module smbshare | select name

Name
----
Block-SmbShareAccess
Close-SmbOpenFile
Close-SmbSession
Get-SmbClientConfiguration
Get-SmbClientNetworkInterface
Get-SmbConnection
Get-SmbConnectionNetworkInterface
Get-SmbOpenFile
Get-SmbServerConfiguration
Get-SmbServerNetworkInterface
Get-SmbSession
Get-SmbShare
Get-SmbShareAccess
Grant-SmbShareAccess
New-SmbConnection
New-SmbShare
Remove-SmbConnection
Remove-SmbShare
Revoke-SmbShareAccess
Set-SmbClientConfiguration
Set-SmbServerConfiguration
Set-SmbShare
Unblock-SmbShareAccess

что сильно намекает на то, что мой модуль ShareUtils прожил яркую, но короткую жизнь. Начиная с релиза Windows 8 проку от него особо не будет.

  • PKIClient

ВНЕЗАПНО!!! Команда пкитима (Windows PKI team), издавна прославляющая религиозно правильный certutil.exe и люто-бешено отрицающая PowerShell снизошла до того, чтобы доставить и свои (поверьте, он там не один!) модули в Windows 8. Или, как вариант, получили хороший нагоняй от Джефри Сновера. Windows PKI представлен двумя модулями — клиентским и серверным. Клиентский модуль представлен следующими командами:

PS C:\> gcm -Module pkiclient | select name

Name
----
Add-EnrollmentPolicyServer
Export-Certificate
Export-PfxCertificate
Get-AutoEnrollmentPolicy
Get-Certificate
Get-CertificateNotificationTask
Get-EnrollmentPolicyServer
Get-PfxData
Import-Certificate
Import-PfxCertificate
New-CertificateNotificationTask
New-SelfSignedCertificate
Remove-CertificateNotificationTask
Remove-EnrollmentPolicyServer
Set-AutoEnrollmentPolicy
Switch-Certificate
Test-Certificate

Поскольку я немного разбираюсь в PKI и PowerShell, состав этого модуля меня несколько смутил, удивил, оздачил, загнал в тупик. Например, зачем было делать 2 отдельных командлета для экспорта и импорта сертификатов (один для простых сертификатов, другой исключительно для pkcs#12). Что делает Switch-Certificate для меня осталось загадкой. Кстати говоря, командлет Get-Certificate делает совсем не то, что вы подумали. Этот командлет выполняет энроллмент (запрос) сертификата. Всё-таки:

PS C:\> Get-Verb request

Verb                                                        Group
----                                                        -----
Request                                                     Lifecycle

Вобщем, на текущий момент модуль радует, но не впечатляет (если что, я вам не говорил, что 70% функционала модуля не работает вообще).

  • CertificateServicesCmdlets

Серверный модуль предназначен для управления службами сертификатов — Active Directory Certificate Services (ADCS). Когда я увидел модуль, чуть не описался от радости. Но заглянув в модуль моё лицо изобразило очень сложное выражение, похожее на постиранную радугу. Я не знаю, как выглядит постиранная радуга, но выглядит модуль примерно так:

PS C:\> gcm -Module CertificateServicesCmdlets | select name

Name
----
Get-AdcsCertificationAuthorityConfigurationDefaults
Get-AdcsConfigurationState
Get-AdcsEnrollmentPolicyWebServiceConfigurationDefaults
Get-AdcsEnrollmentWebServiceConfigurationDefaults
Get-AdcsNetworkDeviceEnrollmentConfigurationDefaults
Get-SSLCertificates
Import-AdcsCertificationAuthorityCACertificatePfx
Install-AdcsCertificationAuthority
Install-AdcsEnrollmentPolicyWebService
Install-AdcsEnrollmentWebService
Install-AdcsNetworkDeviceEnrollmentService
Install-AdcsOnlineResponder
Install-AdcsWebEnrollment
Uninstall-AdcsCertificationAuthority
Uninstall-AdcsEnrollmentPolicyWebService
Uninstall-AdcsEnrollmentWebService
Uninstall-AdcsNetworkDeviceEnrollmentService
Uninstall-AdcsOnlineResponder
Uninstall-AdcsWebEnrollment

на сегодняшний день ни о каком управлении ADCS говорить не приходится, просто набор командлетов для установки/удаления компонентов ADCS. Однако, на удивление некоторые командлеты продуманы достаточно хорошо и даже работают! Т.е. функционально они будут очень полезны. С другой стороны, они оставили мне место для моего PowerShell PKI модуля. Разочаровывают 3 вещи:

  1. Get-SSLCertificates — за такое можно смело лупить ножкой от стула. Потому что минздравСновер не одобряет использование названий командлетов во множественном числе.
  2. Тот же get-SSLCertificates куда-то потерял свой префикс.
  3. Команда Windows PKI решила посоревноваться в специальной олимпиаде с командой Active Directory на самое длинное название командлета:
PS C:\> gcm -Module activedirectory -Name *password* | select name

Name
----
Add-ADDomainControllerPasswordReplicationPolicy
Add-ADFineGrainedPasswordPolicySubject
Get-ADAccountResultantPasswordReplicationPolicy
Get-ADDefaultDomainPasswordPolicy
Get-ADDomainControllerPasswordReplicationPolicy
Get-ADDomainControllerPasswordReplicationPolicyUsage
Get-ADFineGrainedPasswordPolicy
Get-ADFineGrainedPasswordPolicySubject
Get-ADUserResultantPasswordPolicy
New-ADFineGrainedPasswordPolicy
Remove-ADDomainControllerPasswordReplicationPolicy
Remove-ADFineGrainedPasswordPolicy
Remove-ADFineGrainedPasswordPolicySubject
Reset-ADServiceAccountPassword
Set-ADAccountPassword
Set-ADDefaultDomainPasswordPolicy
Set-ADFineGrainedPasswordPolicy

И ни одного алиаса! Пока что Windows PKI впереди на 3 символа:

PS C:\> "Get-ADDomainControllerPasswordReplicationPolicyUsage".length
52
PS C:\> "Get-AdcsEnrollmentPolicyWebServiceConfigurationDefaults".length
55

Но мы поддержим команду Active Directory и обвиним команду Windows PKI в том, что у последних префикс на 2 символа длиннее (AD против ADCS), т.е. в итоге превосходство в 1 символ. Кому же достанется первый приз? :) Но мы поддержим обе команды и узнаем победителя с релизом Windows Server 8 :)

В пост про модули я хочу рассказать и про новую возможность автозавершения команд в PowerShell 3.0: при импорте модуля вы можете набрать Import-Module, нажать <tab> и tab expansion будет автозавершать имена модулей. Т.е. вам достаточно знать 1-2 первые буквы названия модуля и он у вас в кармане ;)

На сегодня всё. В следующий раз я постараюсь рассказать ещё что-нибудь интересное про PowerShell 3.0.


Share this article:

Comments:

Comments are closed.