Quantcast
Channel: TechNet Blogs
Viewing all articles
Browse latest Browse all 36188

New PowerShell cmdlets in Windows Server 2016 TP2 (compared to Windows Server 2012 R2)

$
0
0

 

1. State the problem

 

With the release of Windows Server 2016 TP2 a few weeks ago, I was wondering what new PowerShell cmdlets are now included (when you compare to Windows Server 2012 R2). However, the list of cmdlets is so long now that it is hard to spot the differences by hand.

However, there a cmdlet in PowerShell to show all the cmdlets available (Get-Command) and a little bit of programming would make it easy to find out what are the main differences. So I set out to collect the data and compare the list.

 

DISCLAIMER: As you probably know already, the Technical Preview is subject to change so all the information about Windows Server 2016 TP2 is preliminary and may not make it into the final product. Use with care, your mileage may vary, not available in all areas, some restrictions apply, professional PowerShell operator on a closed Azure VM course, do not attempt.

 

2. Gather the data

 

First, I needed the list of cmdlets from both versions of the operating system. That was actually pretty easy to gather, with a little help from Azure. I basically provisioned two Azure VM, one running Windows Server 2012 R2 and one running Windows Server 2016 Technical Preview 2 (yes, TP2 is now available in the regular Azure VM image gallery).

Second, I installed all of the Remote Server Administration Tools (RSAT) on both versions. That loads the PowerShell modules used for managing features that are not installed by default, like Failover Cluster or Storage Replica.

Finally, I ran a simple cmdlet to gather the list from Get-Command and save it to an XML file. This made it easier to put all the data I needed in a single place (my desktop machine running Windows 10 Insider Preview). Here's a summary of what it took:

  • Create WS 2012 R2 Azure VM
  • Install RSAT in the WS 2012 R2 VM
    • Get-WindowsFeature RSAT* | Install-WindowsFeature
  • Capture XML file with all the WS 2012 R2 cmdlet information
    • Get-Command | Select * | Export-CliXml C:\WS2012R2Cmdlets.XML
  • Create WS 2016 TP2 Azure VM
  • Install RSAT in the WS 2016 TP2 VM
    • Get-WindowsFeature RSAT* | Install-WindowsFeature

  • Capture XML file with all the WS 2016 TP2 cmdlet information
    • Get-Command | Select * | Export-CliXml C:\WS2016TP2Cmdlets.XML

 

3. Process the data

 

With the two XML files at hand, all I had left to do was to compare them to produce a good list of what's new. The first attempt resulted in a long list that was hard to understand, so I decided to do it module by module.

The code starts by creating a combined list of modules from both operating systems. Then it builds a dictionary of all cmdlets for a given module, assigning the value 1 if it's in WS 2012 R2, 2 if it's in WS 2016 TP2 and 3 if it's in both.

Then I would show the total number of cmdlets per module per OS, then number of new cmdlets and the actual list of new cmdlets. Since the goal was to publish this blog, I actually wrote the script to format the output as an HTML table. Quite handy :-).

 

4. Show the results

 

Finally, here is resulting table with all the new PowerShell cmdlets (by module) in Windows Server 2016 TP2, compared to Windows Server 2012. Enjoy!

 

ModuleNew CmdletsWS 2016 TP2
Cmdlets
WS 2012 R2
Cmdlets
03838
ActiveDirectory0147147
ADRMSAdmin02121
AppLocker055
Appx8146
+ Add-AppxVolume
+ Dismount-AppxVolume
+ Get-AppxDefaultVolume
+ Get-AppxVolume
+ Mount-AppxVolume
+ Move-AppxPackage
+ Remove-AppxVolume
+ Set-AppxDefaultVolume
BestPractices044
BitLocker01313
BitsTransfer088
BranchCache03232
CimCmdlets01414
CIPolicy110
+ ConvertFrom-CIPolicy
ClusterAwareUpdating01717
ConfigCI10100
+ Edit-CIPolicyRule
+ Get-CIPolicy
+ Get-CIPolicyInfo
+ Get-SystemDriver
+ Merge-CIPolicy
+ New-CIPolicy
+ New-CIPolicyRule
+ Remove-CIPolicyRule
+ Set-HVCIOptions
+ Set-RuleOption
Defender11110
+ Add-MpPreference
+ Get-MpComputerStatus
+ Get-MpPreference
+ Get-MpThreat
+ Get-MpThreatCatalog
+ Get-MpThreatDetection
+ Remove-MpPreference
+ Remove-MpThreat
+ Set-MpPreference
+ Start-MpScan
+ Update-MpSignature
DFSN02323
DFSR34542
+ Get-DfsrDelegation
+ Grant-DfsrDelegation
+ Revoke-DfsrDelegation
DhcpServer0121121
DirectAccessClientComponents01111
Dism44339
+ Add-WindowsCapability
+ Expand-WindowsCustomDataImage
+ Get-WindowsCapability
+ Remove-WindowsCapability
DnsClient01717
DnsServer21122101
+ 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
EventTracingManagement14140
+ 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
FailoverClusters28482
+ New-ClusterNameAccount
+ Update-ClusterFunctionalLevel
GroupPolicy02929
HgsClient11110
+ Export-HgsGuardian
+ Get-HgsAttestationBaselinePolicy
+ Get-HgsClientConfiguration
+ Get-HgsGuardian
+ Grant-HgsKeyProtectorAccess
+ Import-HgsGuardian
+ New-HgsGuardian
+ New-HgsKeyProtector
+ Remove-HgsGuardian
+ Revoke-HgsKeyProtectorAccess
+ Set-HgsClientConfiguration
Hyper-V26204178
+ 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
IISAdministration17170
+ 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
International01818
iSCSI01313
IscsiTarget02828
ISE033
Kds066
Microsoft.PowerShell.Archive220
+ Compress-Archive
+ Expand-Archive
Microsoft.PowerShell.Core56055
+ Debug-Job
+ Enter-PSHostProcess
+ Exit-PSHostProcess
+ Get-PSHostProcessInfo
+ Register-ArgumentCompleter
Microsoft.PowerShell.Diagnostics055
Microsoft.PowerShell.Host022
Microsoft.PowerShell.Management48682
+ Clear-RecycleBin
+ Get-Clipboard
+ Get-ItemPropertyValue
+ Set-Clipboard
Microsoft.PowerShell.ODataUtils110
+ Export-ODataEndpointProxy
Microsoft.PowerShell.Security01313
Microsoft.PowerShell.Utility1110594
+ 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.Management01313
MMAgent055
MsDtc04141
NetAdapter46864
+ Disable-NetAdapterPacketDirect
+ Enable-NetAdapterPacketDirect
+ Get-NetAdapterPacketDirect
+ Set-NetAdapterPacketDirect
NetConnection022
NetEventPacketCapture02323
NetLbfo01313
NetNat01313
NetQos044
NetSecurity08585
NetSwitchTeam077
NetTCPIP03434
NetWNV01919
NetworkConnectivityStatus044
NetworkController1411410
+ 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
NetworkLoadBalancingClusters03535
NetworkSwitchManager19190
+ 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
NetworkTransition03434
NFS04242
Nps-6713
- Get-NpsRemediationServer
- Get-NpsRemediationServerGroup
- New-NpsRemediationServer
- New-NpsRemediationServerGroup
- Remove-NpsRemediationServer
- Remove-NpsRemediationServerGroup
PackageManagement10100
+ Find-Package
+ Get-Package
+ Get-PackageProvider
+ Get-PackageSource
+ Install-Package
+ Register-PackageSource
+ Save-Package
+ Set-PackageSource
+ Uninstall-Package
+ Unregister-PackageSource
PcsvDevice495
+ Clear-PcsvDeviceLog
+ Get-PcsvDeviceLog
+ Set-PcsvDeviceNetworkConfiguration
+ Set-PcsvDeviceUserPassword
Pester20200
+ 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
PKI01717
PnpDevice440
+ Disable-PnpDevice
+ Enable-PnpDevice
+ Get-PnpDevice
+ Get-PnpDeviceProperty
PowerShellGet11110
+ Find-Module
+ Get-InstalledModule
+ Get-PSRepository
+ Install-Module
+ Publish-Module
+ Register-PSRepository
+ Save-Module
+ Set-PSRepository
+ Uninstall-Module
+ Unregister-PSRepository
+ Update-Module
PrintManagement02222
PSDesiredStateConfiguration51712
+ Connect-DscConfiguration
+ Find-DscResource
+ Get-DscConfigurationStatus
+ Invoke-DscResource
+ Publish-DscConfiguration
PSDiagnostics01010
PSReadline550
+ Get-PSReadlineKeyHandler
+ Get-PSReadlineOption
+ Remove-PSReadlineKeyHandler
+ Set-PSReadlineKeyHandler
+ Set-PSReadlineOption
PSScheduledJob01616
PSWorkflow022
PSWorkflowUtility011
RemoteAccess14121107
+ 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
RemoteDesktop57873
+ Export-RDPersonalSessionDesktopAssignment
+ Get-RDPersonalSessionDesktopAssignment
+ Import-RDPersonalSessionDesktopAssignment
+ Remove-RDPersonalSessionDesktopAssignment
+ Set-RDPersonalSessionDesktopAssignment
ScheduledTasks01919
SecureBoot055
ServerCore022
ServerManager077
ServerManagerTasks01111
ShieldedVMDataFile330
+ Import-ShieldingDataFile
+ New-VolumeIDQualifier
+ Protect-ShieldingDataFile
ShieldedVMTemplate110
+ Protect-ServerVHDX
SmbShare03535
SmbWitness033
SoftwareInventoryLogging01111
StartScreen033
Storage32140108
+ 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
StorageQoS660
+ Get-StorageQoSFlow
+ Get-StorageQoSPolicy
+ Get-StorageQoSVolume
+ New-StorageQoSPolicy
+ Remove-StorageQoSPolicy
+ Set-StorageQoSPolicy
StorageReplica11110
+ Get-SRGroup
+ Get-SRPartnership
+ New-SRGroup
+ New-SRPartnership
+ Remove-SRGroup
+ Remove-SRPartnership
+ Set-SRGroup
+ Set-SRPartnership
+ Suspend-SRGroup
+ Sync-SRGroup
+ Test-SRTopology
TLS374
+ Disable-TlsCipherSuite
+ Enable-TlsCipherSuite
+ Get-TlsCipherSuite
TroubleshootingPack022
TrustedPlatformModule01111
UpdateServices41612
+ Add-WsusDynamicCategory
+ Get-WsusDynamicCategory
+ Remove-WsusDynamicCategory
+ Set-WsusDynamicCategory
UserAccessLogging01414
VpnClient01919
Wdac01212
WebAdministration08080
Whea022
WindowsDeveloperLicense033
WindowsErrorReporting033
WindowsSearch022

 

5. Share the code

 

For those wondering about the script I used to compile the results, here it goes.

#
# Enumerating all the modules from both OS versions
#

$Files= ( (Import-Clixml"C:\WS2012R2Cmdlets.XML"),
           (Import-Clixml"C:\WS2016TP2Cmdlets.XML") )
$ModuleDict= @{}

$Files|% {
  $_|GroupModuleName|SortName|% {
    $Module=$_.Name
    If ($ModuleDict.ContainsKey($Module)) {
      $ModuleDict.$Module++
    } Else {
      $ModuleDict.Add($Module,1)
    } # End If
  } # End Import
} # End 0..1

#
# Enumerate the cmdlets in every module
#

Write-Host
"<table border=1><tr><td><b>Module</b></td><td>New Cmdlets</td><td>WS 2016 TP2</td><td>WS 2012 R2</td></tr>"
$ModuleDict.GetEnumerator() |SortName|% {
  $Module=$_.Name
  $VersionCount= (0,0)
  $CmdletDict= @{}

  0
..1|% {
    $WSVersion=$_
    $Files[$_]|?ModuleName-eq$Module|% {
      $Cmdlet=$_.Name
      $VersionCount[$WSVersion]++
      If ($CmdletDict.ContainsKey($Cmdlet)) {
        $CmdletDict.$Cmdlet+= ($WSVersion+1)
      } Else {
        $CmdletDict.Add($Cmdlet, ($WSVersion+1))
      } # End If
    } # End %
  } # End 0..1

  #
  # Output the list of cmdlets that changed in every module
  #

  $WS0=$VersionCount[0]
  $WS1=$VersionCount[1]
  $Dif=$WS1-$WS0
  $CrLf="<BR>"+[char]10+[char]13

  Write-Host"<tr><td><b>$Module</b></td><td align=`"right`">$Dif</td><td align=`"right`">$WS1</td><td align=`"right`">$WS0</td></tr>"
  If ($CmdletDict.Count -gt0) {
    $CmdletList=""
    $CmdletDict.GetEnumerator() |? {$_.Value -eq2-or$_.Value -eq1} |SortName|% {
      $Name=$_.Name
      If ($_.Value -eq1) {
        $CmdletList+="- $Name"+$CrLf
      } else {
        $CmdletList+="+ $Name"+$CrLf
      } # End If
    } # End Enumerator
    If ($CmdletList-ne"") {
      Write-Host"<tr><td colspan=4>$CmdletList</td></tr>"
    } # End If
  } # End if

} # End Module
Write-Host"</table>"

 


Viewing all articles
Browse latest Browse all 36188

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>