Всем желающим уже давно доступна для скачивания клиентская версия 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. Из наиболее интересных вещей хочется обрать внимание на вот какие модули:
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 проку от него особо не будет.
ВНЕЗАПНО!!! Команда пкитима (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% функционала модуля не работает вообще).
Серверный модуль предназначен для управления службами сертификатов — 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 вещи:
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.
Comments: