Con la nueva llegada de Windows Server 2016 llegan nuevas características para facilitar nuestra administración.
Como todos sabemos Windows PowerShell es una poderosa herramienta de Microsoft incluida en sus sistemas operativos de servidor y con la cual podemos realizar múltiples tareas administrativas. La versión PowerShell de Windows Server 2012 daba ya mucho juego, veamos las novedades.
Windows PowerShell es una herramienta de CLI (Command Line) la cual nos permite unir comandos por medio de scripts. Sus funciones son bastante amplias y Powershell no actúa solo con Server sino con otras plataformas como SQL Server, Exchange, entre otras.
En Windows Server 2016 PowerShell se incluyen nuevas características para su gestión, algunas de estas son:
Microsoft también se ha encargado de mejorar el entorno del Windows PowerShell ISE (Scripting Integrado), se han adicionado las siguientes características:
- Se ha agregado compatibilidad con Intellisense a los proveedores y configuraciones de estado en PowerShell.
- El ISE de PowerShell permite la depuración de los scripts remotos y de los flujos de trabajo.
Características adicionales en los servicios web de Windows PowerShell:
- Administración simplificada del esquema de distribución, al generarse los valores de los campos faltantes de manera automática.
- En caso de presentarse algún error en los servicios web de PowerShell al momento de ejecutarse un cmdlet, los mensajes de error serán más detallados.
- En Windows Server 2016, los servicios web de PowerShell pueden expandir una instancia asociada mientras una consulta está en ejecución.
- Permite a los usuarios obtener los mismos resultados cuando el acceso es menos directo.
- El método Get-Type nos permite ver objetos deserializados.
- Con el cmdlet Get-Counter podremos devolver contadores que contienen un carácter de apóstrofo.
- Con el cmdlet Import-Csv se podrán omitir las líneas vacías.
- Remove-Item ahora es capaz de eliminar los elementos incluidos en las subcarpetas.
- El parámetro #Requires permite a los usuarios tomar derechos de administración.
- Ahora se verán todos los resultados disponibles con el cmdlet Invoke-RestMethod
- El parámetro Select-object-Expand ya no nos generará errores si el valor es null.
- Get-Process ahora podrá ser usando en conjunto con otros comandos para obtener la propiedad ComputerName de algún objeto.
- El parámetro Get-Job devuelve un trabajo programado completo.
- Se han preocupado por realizar mejoras de rendimiento en el proceso de importación de flujos de trabajo.
Otra de las virtudes de un flujo de trabajo es que son portátiles y se pueden exportar en algunas extensiones como XAML.
Como administradores tenemos ventajas usando el flujo de trabajo de PowerShell, algunas de éstas son:
- Supervisión remota de las tareas de larga ejecución: Es posible que en cualquier momento veamos el estado de las tareas.
- Automatización de tareas
- Administración y control de diferentes dispositivos: Podemos usar parámetros como PSComputerName para gestionar diferentes entornos.
- Desarrollo de diversas tareas: Podemos ejecutar diferentes tareas de manera simultánea con un solo script.
- Programación: Es posible programar diversas tareas como un script o un cmdlet.
- Confiabilidad: Contamos con recuperación de errores automatizada.
Tomando algunos datos, veremos una comparación de los nuevos cmdlets PowerShell incluidos en Windows Server 2016 comparado con Windows Server 2012 R2.
Modulo Específico Nuevos CMDLets WS 2016 Cmdlets WS 2012 R2 Cmdlets ActiveDirectory 0 147 147 ADRMSAdmin 0 21 21 AppLocker 0 5 5 Appx 8 14 6 + Add-AppxVolume + Dismount-AppxVolume + Get-AppxDefaultVolume + Get-AppxVolume + Mount-AppxVolume + Move-AppxPackage + Remove-AppxVolume + Set-AppxDefaultVolume BestPractices 0 4 4 BitLocker 0 13 13 BitsTransfer 0 8 8 BranchCache 0 32 32 CimCmdlets 0 14 14 CIPolicy 1 1 0 + ConvertFrom-CIPolicy ClusterAwareUpdating 0 17 17 ConfigCI 10 10 0 + Edit-CIPolicyRule + Get-CIPolicy + Get-CIPolicyInfo + Get-SystemDriver + Merge-CIPolicy + New-CIPolicy + New-CIPolicyRule + Remove-CIPolicyRule + Set-HVCIOptions + Set-RuleOption Modulo Específico Nuevos CMDLets WS 2016 Cmdlets WS 2012 R2 Cmdlets Defender 11 11 0 + Add-MpPreference + Get-MpComputerStatus + Get-MpPreference + Get-MpThreat + Get-MpThreatCatalog + Get-MpThreatDetection + Remove-MpPreference + Remove-MpThreat + Set-MpPreference + Start-MpScan + Update-MpSignature Modulo Específico Nuevos CMDLets WS 2016 Cmdlets WS 2012 R2 Cmdlets DFSN 0 23 23 DFSR 3 45 42 + Get-DfsrDelegation + Grant-DfsrDelegation + Revoke-DfsrDelegation DhcpServer 0 121 121 DirectAccessClientComponen 0 11 11 Dism 4 43 39 + Add-WindowsCapability + Expand-WindowsCustomDataImage + Get-WindowsCapability + Remove-WindowsCapability DnsClient 0 17 17 Modulo Específico Nuevos CMDLets WS 2016 Cmdlets WS 2012 R2 Cmdlets DnsServer 21 122 101 + Add-DnsServerClientSubnet + Add-DnsServerQueryResolutionPolicy + Add-DnsServerRecursionScope + Add-DnsServerZoneScope + Add-DnsServerZoneTransferPolicy + Disable-DnsServerPolicy + Enable-DnsServerPolicy + Get-DnsServerClientSubnet + Get-DnsServerQueryResolutionPolicy + Get-DnsServerRecursionScope + Get-DnsServerZoneScope + Get-DnsServerZoneTransferPolicy + Remove-DnsServerClientSubnet + Remove-DnsServerQueryResolutionPolicy + Remove-DnsServerRecursionScope + Remove-DnsServerZoneScope + Remove-DnsServerZoneTransferPolicy + Set-DnsServerClientSubnet + Set-DnsServerQueryResolutionPolicy + Set-DnsServerRecursionScope + Set-DnsServerZoneTransferPolicy EventTracingManagement 14 14 0 + Add-EtwTraceProvider + Get-AutologgerConfig + Get-EtwTraceProvider + Get-EtwTraceSession + New-AutologgerConfig + New-EtwTraceSession + Remove-AutologgerConfig + Remove-EtwTraceProvider + Remove-EtwTraceSession + Send-EtwTraceSession + Set-AutologgerConfig + Set-EtwTraceProvider + Set-EtwTraceSession + Start-AutologgerConfig Modulo Específico Nuevos CMDLets WS 2016 Cmdlets WS 2012 R2 Cmdlets FailoverClusters 2 84 82 + New-ClusterNameAccount + Update-ClusterFunctionalLevel GroupPolicy 0 29 29 HgsClient 11 11 0 + Export-HgsGuardian + Get-HgsAttestationBaselinePolicy + Get-HgsClientConfiguration + Get-HgsGuardian + Grant-HgsKeyProtectorAccess + Import-HgsGuardian + New-HgsGuardian + New-HgsKeyProtector + Remove-HgsGuardian + Revoke-HgsKeyProtectorAccess + Set-HgsClientConfiguration Hyper-V 26 204 178 + Add-VMGroupMember + Add-VMSwitchTeamMember + Add-VMTPM + Disable-VMConsoleSupport + Enable-VMConsoleSupport + Get-VHDSet + Get-VHDSnapshot + Get-VMGroup + Get-VMHostCluster + Get-VMSwitchTeam + Get-VMTPM + Get-VMVideo + New-VMGroup + Optimize-VHDSet + Remove-VHDSnapshot + Remove-VMGroup + Remove-VMGroupMember + Remove-VMSwitchTeamMember + Rename-VMGroup + Set-VMHostCluster + Set-VMSwitchTeam + Set-VMTPM + Set-VMVideo + Start-VMTrace + Stop-VMTrace + Update-VMVersion Modulo Específico Nuevos CMDLets WS 2016 Cmdlets WS 2012 R2 Cmdlets IISAdministration 17 17 0 + Get-IISAppPool + Get-IISConfigCollectionItem + Get-IISConfigElement + Get-IISConfigSection + Get-IISConfigValue + Get-IISServerManager + Get-IISSite + New-IISConfigCollectionItem + New-IISSite + Remove-IISConfigCollectionItem + Remove-IISSite + Reset-IISServerManager + Set-IISConfigValue + Start-IISCommitDelay + Start-IISSite + Stop-IISCommitDelay + Stop-IISSite International 0 18 18 iSCSI 0 13 13 IscsiTarget 0 28 28 ISE 0 3 3 Kds 0 6 6 Microsoft.PowerShell.Archive 2 2 0 + Compress-Archive + Expand-Archive Microsoft.PowerShell.Core 5 60 55 + Debug-Job + Enter-PSHostProcess + Exit-PSHostProcess + Get-PSHostProcessInfo + Register-ArgumentCompleter Modulo Específico WS2016 WS2012 R2 Cmdlets Microsoft.PowerShell.Diagnostics 0 5 5 Microsoft.PowerShell.Host 0 2 2 Microsoft.PowerShell.Management 4 86 82 + Clear-RecycleBin + Get-Clipboard + Get-ItemPropertyValue + Set-Clipboard Microsoft.PowerShell.ODataUtils 1 1 0 + Export-ODataEndpointProxy Microsoft.PowerShell.Security 0 13 13 Microsoft.PowerShell.Utility 11 105 94 + ConvertFrom-String + Convert-String + Debug-Runspace + Disable-RunspaceDebug + Enable-RunspaceDebug + Format-Hex + Get-Runspace + Get-RunspaceDebug – GetStreamHash + New-Guid + New-TemporaryFile + Wait-Debugger + Write-Information Microsoft.WSMan.Management 0 13 13 MMAgent 0 5 5 MsDtc 0 41 41 NetAdapter 4 68 64 + Disable-NetAdapterPacketDirect + Enable-NetAdapterPacketDirect + Get-NetAdapterPacketDirect + Set-NetAdapterPacketDirect NetConnection 0 2 2 NetEventPacketCapture 0 23 23 NetLbfo 0 13 13 NetNat 0 13 13 NetQos 0 4 4 NetSecurity 0 85 85 NetSwitchTeam 0 7 7 NetTCPIP 0 34 34 NetWNV 0 19 19 NetworkConnectivityStatus 0 4 4 NetworkController 141 141 0 + Add-NetworkControllerNode + Clear-NetworkControllerNodeContent + Disable-NetworkControllerNode + Enable-NetworkControllerNode + Export-NetworkController + Get-NetworkController + Get-NetworkControllerCanaryConfiguration + Get-NetworkControllerCluster + Get-NetworkControllerCredential + Get-NetworkControllerDevice + Get-NetworkControllerDeviceGroupingTestConfiguration + Get-NetworkControllerDeviceGroups + Get-NetworkControllerDeviceGroupUsage + Get-NetworkControllerDeviceUsage + Get-NetworkControllerDiagnostic + Get-NetworkControllerDiscoveredTopology + Get-NetworkControllerExternalTestRule + Get-NetworkControllerFabricRoute + Get-NetworkControllerGoalTopology + Get-NetworkControllerInterface + Get-NetworkControllerInterfaceUsage + Get-NetworkControllerIpPool + Get-NetworkControllerIpPoolStatistics + Get-NetworkControllerIpSubnetStatistics + Get-NetworkControllerLogicalNetwork + Get-NetworkControllerLogicalSubnet + Get-NetworkControllerMonitoringService + Get-NetworkControllerNode + Get-NetworkControllerPhysicalHostInterfaceParameter + Get-NetworkControllerPhysicalHostParameter + Get-NetworkControllerPhysicalSwitchCpuUtilizationParameter + Get-NetworkControllerPhysicalSwitchInterfaceParameter + Get-NetworkControllerPhysicalSwitchMemoryUtilizationParameter + Get-NetworkControllerPhysicalSwitchParameter + Get-NetworkControllerPSwitch + Get-NetworkControllerPublicIpAddress + Get-NetworkControllerServer + Get-NetworkControllerServerInterface + Get-NetworkControllerSwitchBgpPeer + Get-NetworkControllerSwitchBgpRouter + Get-NetworkControllerSwitchConfig + Get-NetworkControllerSwitchNetworkRoute + Get-NetworkControllerSwitchPort + Get-NetworkControllerSwitchPortChannel + Get-NetworkControllerSwitchVlan + Get-NetworkControllerTopologyConfiguration + Get-NetworkControllerTopologyDiscoveryStatistics + Get-NetworkControllerTopologyLink + Get-NetworkControllerTopologyNode + Get-NetworkControllerTopologyTerminationPoint + Get-NetworkControllerTopologyValidationReport + Get-NetworkControllerVirtualInterface + Get-NetworkControllerVirtualNetworkUsage + Get-NetworkControllerVirtualPort + Get-NetworkControllerVirtualServer + Get-NetworkControllerVirtualServerInterface + Get-NetworkControllerVirtualSwitch + Get-NetworkControllerVirtualSwitchPortParameter + Import-NetworkController + Install-NetworkController + Install-NetworkControllerCluster + New-NetworkControllerCanaryConfiguration + New-NetworkControllerCredential + New-NetworkControllerDevice + New-NetworkControllerDeviceGroupingTestConfiguration + New-NetworkControllerDeviceGroups + New-NetworkControllerExternalTestRule + New-NetworkControllerInterface + New-NetworkControllerIpPool + New-NetworkControllerLogicalNetwork + New-NetworkControllerMonitoringService + New-NetworkControllerNodeObject + New-NetworkControllerPhysicalHostInterfaceParameter + New-NetworkControllerPhysicalHostParameter + New-NetworkControllerPhysicalSwitchCpuUtilizationParameter + New-NetworkControllerPhysicalSwitchInterfaceParameter + New-NetworkControllerPhysicalSwitchMemoryUtilizationParameter + New-NetworkControllerPhysicalSwitchParameter + New-NetworkControllerPSwitch + New-NetworkControllerPublicIpAddress + New-NetworkControllerServer + New-NetworkControllerServerInterface + New-NetworkControllerSwitchBgpPeer + New-NetworkControllerSwitchBgpRouter + New-NetworkControllerSwitchNetworkRoute + New-NetworkControllerSwitchPortChannel + New-NetworkControllerSwitchVlan + New-NetworkControllerTopologyLink + New-NetworkControllerTopologyNode + New-NetworkControllerTopologyTerminationPoint + New-NetworkControllerVirtualInterface + New-NetworkControllerVirtualPort + New-NetworkControllerVirtualServer + New-NetworkControllerVirtualServerInterface + New-NetworkControllerVirtualSwitch + New-NetworkControllerVirtualSwitchPortParameter + Remove-NetworkControllerCanaryConfiguration + Remove-NetworkControllerCredential + Remove-NetworkControllerDevice + Remove-NetworkControllerDeviceGroupingTestConfiguration + Remove-NetworkControllerDeviceGroups + Remove-NetworkControllerExternalTestRule + Remove-NetworkControllerFabricRoute + Remove-NetworkControllerInterface + Remove-NetworkControllerIpPool + Remove-NetworkControllerLogicalNetwork + Remove-NetworkControllerLogicalSubnet + Remove-NetworkControllerNode + Remove-NetworkControllerPhysicalSwitchCpuUtilizationParameter + Remove-NetworkControllerPhysicalSwitchMemoryUtilizationParameter + Remove-NetworkControllerPSwitch + Remove-NetworkControllerPublicIpAddress + Remove-NetworkControllerServer + Remove-NetworkControllerServerInterface + Remove-NetworkControllerSwitchBgpPeer + Remove-NetworkControllerSwitchBgpRouter + Remove-NetworkControllerSwitchNetworkRoute + Remove-NetworkControllerSwitchPortChannel + Remove-NetworkControllerSwitchVlan + Remove-NetworkControllerTopologyLink + Remove-NetworkControllerTopologyNode + Remove-NetworkControllerTopologyTerminationPoint + Remove-NetworkControllerVirtualInterface + Remove-NetworkControllerVirtualPort + Remove-NetworkControllerVirtualServer + Remove-NetworkControllerVirtualServerInterface + Remove-NetworkControllerVirtualSwitch + Repair-NetworkControllerCluster + Set-NetworkController + Set-NetworkControllerCluster + Set-NetworkControllerDiagnostic + Set-NetworkControllerFabricRoute + Set-NetworkControllerGoalTopology + Set-NetworkControllerLogicalSubnet + Set-NetworkControllerNode + Set-NetworkControllerSwitchConfig + Set-NetworkControllerSwitchPort + Set-NetworkControllerTopologyConfiguration + Start-NetworkControllerTopologyDiscovery + Uninstall-NetworkController + Uninstall-NetworkControllerCluster NetworkLoadBalancingClusters 0 35 35 NetworkSwitchManager 19 19 0 + Disable-NetworkSwitchEthernetPort + Disable-NetworkSwitchFeature + Disable-NetworkSwitchVlan + Enable-NetworkSwitchEthernetPort + Enable-NetworkSwitchFeature + Enable-NetworkSwitchVlan + Get-NetworkSwitchEthernetPort + Get-NetworkSwitchFeature + Get-NetworkSwitchGlobalData + Get-NetworkSwitchVlan + New-NetworkSwitchVlan + Remove-NetworkSwitchEthernetPortIPAddress + Remove-NetworkSwitchVlan + Restore-NetworkSwitchConfiguration + Save-NetworkSwitchConfiguration + Set-NetworkSwitchEthernetPortIPAddress + Set-NetworkSwitchPortMode + Set-NetworkSwitchPortProperty + Set-NetworkSwitchVlanProperty NetworkTransition 0 34 34 NFS 0 42 42 Nps -6 7 13 - Get-NpsRemediationServer – Get-NpsRemediationServerGroup – New-NpsRemediationServer – New-NpsRemediationServerGroup – Remove-NpsRemediationServer – Remove-NpsRemediationServerGroup PackageManagement 10 10 0 + Find-Package + Get-Package + Get-PackageProvider + Get-PackageSource + Install-Package + Register-PackageSource + Save-Package + Set-PackageSource + Uninstall-Package + Unregister-PackageSource PcsvDevice 4 9 5 + Clear-PcsvDeviceLog + Get-PcsvDeviceLog + Set-PcsvDeviceNetworkConfiguration + Set-PcsvDeviceUserPassword Pester 20 20 0 + AfterAll + AfterEach + Assert-MockCalled + Assert-VerifiableMocks + BeforeAll + BeforeEach + Context + Describe + Get-MockDynamicParameters + Get-TestDriveItem + In + InModuleScope + Invoke-Mock + Invoke-Pester + It + Mock + New-Fixture + Set-DynamicParameterVariables + Setup + Should PKI 0 17 17 PnpDevice 4 4 0 + Disable-PnpDevice + Enable-PnpDevice + Get-PnpDevice + Get-PnpDeviceProperty PowerShellGet 11 11 0 + Find-Module + Get-InstalledModule + Get-PSRepository + Install-Module + Publish-Module + Register-PSRepository + Save-Module + Set-PSRepository + Uninstall-Module + Unregister-PSRepository + Update-Module PrintManagement 0 22 22 PSDesiredStateConfiguration 5 17 12 + Connect-DscConfiguration + Find-DscResource + Get-DscConfigurationStatus + Invoke-DscResource + Publish-DscConfiguration Modulo Específico Nuevos CMDLets WS 2016 Cmdlets WS 2012 R2 Cmdlets PSDiagnostics 0 10 10 PSReadline 5 5 0 + Get-PSReadlineKeyHandler + Get-PSReadlineOption + Remove-PSReadlineKeyHandler + Set-PSReadlineKeyHandler + Set-PSReadlineOption PSScheduledJob 0 16 16 PSWorkflow 0 2 2 PSWorkflowUtility 0 1 1 RemoteAccess 14 121 107 + Add-BgpRouteAggregate + Add-VpnSstpProxyRule + Clear-BgpRouteFlapDampening + Disable-BgpRouteFlapDampening + Enable-BgpRouteFlapDampening + Get-BgpRouteAggregate + Get-BgpRouteFlapDampening + Get-VpnSstpProxyRule + New-VpnSstpProxyRule + Remove-BgpRouteAggregate + Remove-VpnSstpProxyRule + Set-BgpRouteAggregate + Set-BgpRouteFlapDampening + Set-VpnSstpProxyRule RemoteDesktop 5 78 73 + Export-RDPersonalSessionDesktopAssignment + Get-RDPersonalSessionDesktopAssignment + Import-RDPersonalSessionDesktopAssignment + Remove-RDPersonalSessionDesktopAssignment + Set-RDPersonalSessionDesktopAssignment Modulo Específico Nuevos CMDLets WS 2016 Cmdlets WS 2012 R2 Cmdlets ScheduledTasks 0 19 19 SecureBoot 0 5 5 ServerCore 0 2 2 ServerManager 0 7 7 ServerManagerTasks 0 11 11 ShieldedVMDataFile 3 3 0 + Import-ShieldingDataFile + New-VolumeIDQualifier + Protect-ShieldingDataFile ShieldedVMTemplate 1 1 0 + Protect-ServerVHDX SmbShare 0 35 35 SmbWitness 0 3 3 SoftwareInventoryLogging 0 11 11 StartScreen 0 3 3 Storage 32 140 108 + Block-FileShareAccess + Clear-StorageDiagnosticInfo + Debug-FileShare + Debug-StorageSubSystem + Disable-PhysicalDiskIdentification + Disable-StorageDiagnosticLog + Enable-PhysicalDiskIdentification + Enable-StorageDiagnosticLog + Get-DedupProperties + Get-DiskSNV + Get-DiskStorageNodeView + Get-FileShare + Get-FileShareAccessControlEntry + Get-StorageAdvancedProperty + Get-StorageDiagnosticInfo + Get-StorageEnclosureSNV + Get-StorageEnclosureStorageNodeView + Get-StorageFaultDomain + Get-StorageFileServer + Grant-FileShareAccess + New-FileShare + New-StorageFileServer + Optimize-StoragePool + Remove-FileShare + Remove-StorageFileServer + Revoke-FileShareAccess + Set-FileShare + Set-StorageFileServer + Start-StorageDiagnosticLog + Stop-StorageDiagnosticLog + Stop-StorageJob + Unblock-FileShareAccess StorageQoS 6 6 0 + Get-StorageQoSFlow + Get-StorageQoSPolicy + Get-StorageQoSVolume + New-StorageQoSPolicy + Remove-StorageQoSPolicy + Set-StorageQoSPolicy StorageReplica 11 11 0 + Get-SRGroup + Get-SRPartnership + New-SRGroup + New-SRPartnership + Remove-SRGroup + Remove-SRPartnership + Set-SRGroup + Set-SRPartnership + Suspend-SRGroup + Sync-SRGroup + Test-SRTopology TLS 3 7 4 + Disable-TlsCipherSuite + Enable-TlsCipherSuite + Get-TlsCipherSuite TroubleshootingPack 0 2 2 TrustedPlatformModule 0 11 11 UpdateServices 4 16 12 + Add-WsusDynamicCategory + Get-WsusDynamicCategory + Remove-WsusDynamicCategory + Set-WsusDynamicCategoryComo vemos, Microsoft nos brinda muchas más posibilidades con Windows PowerShell en Server 2016.
[color=#a9a9a9]Pulsa la imagen para ampliarla[/color]
Para obtener una información más detallada acerca de las funciones de los cmdlets podemos visitar la siguiente página:
Allí podremos encontrar las diferentes categorías y la sintaxis de cómo usarlos.
Como sabemos podemos ejecutar PowerShell de diferentes maneras:
- Normal: Nos permite ejecutar cmdlets con parámetros de usuario normal
- Modo administrador: Podemos ejecutar cmdlets con permisos administrativos para realizar tareas más específicas, para ejecutar como administrador damos clic derecho en el ícono de PowerShell y elegimos Ejecutar como administrador o Run as Administrator
- Modo ISE: Con el modo ISE podremos ejecutar nuestro PowerShell usando scripts.
Ejecutar como administrador
[color=#a9a9a9]Pulsa la imagen para ampliarla[/color]
Modo ISE
[color=#a9a9a9]Pulsa la imagen para ampliarla[/color]
Es importante que podemos ejecutar PowerShell para prácticamente todos los procesos que realizamos en nuestra organización, desde instalaciones, eliminaciones. agregar roles, modificar características, etc.
Como siempre lo hemos recomendado, es importante usar entornos virtuales para realizar pruebas y no afectar el óptimo rendimiento de la organización.