In the book Windows 8 Secrets, we provide a handy series of tables explaining the major differences between the Windows 8 product editions, which include Windows 8 (Core), Windows 8 Pro, Windows 8 Enterprise, and Windows RT. Here, however, we present a far more complete feature breakdown than you’ll see anywhere else.
Pre-order Windows 8 Secrets today on Amazon.com and save!
As a reminder, Microsoft first provided a feature breakdown for the various Window 8 product editions back in April, in a post titled Announcing the Windows 8 Editions. As with similar Microsoft-produced tables for previous Windows versions, however, this this breakdown is woefully inadequate. So in Windows 8 Secrets, we provide a more detailed set of tables based on functional areas such as hardware capabilities, upgrade capabilities, Metro features, desktop features, and so on.
For example, the following VBScript code snippet installs the font in the file ManchuFont2005.ttf from the SourceForge Manchu Font project (http://sourceforge.net/project/showfiles.php?group_id=118623):
- Set sa = CreateObject("Shell.Application")
- Set fonts = sa.NameSpace(20)
- fonts.CopyHere "C:\tmp\ManchuFont2005.ttf"
You can install the same font with this PowerShell command:
- $sa = new-object -comobject shell.application
- $Fonts = $sa.NameSpace(0x14)
- $Fonts.CopyHere ("C:\tmp\ManchuFont2005.ttf")
In this command, I'm using the hexadecimal equivalent of 20—that is, 0x14—as the CLSID value. With PowerShell, you can extend this operation and install as many fonts as you want by using the pipeline and the ForEach-Object cmdlet, like this:
- gci "C:\dsp\Special Fonts\*.ttf" | %\{$fonts.CopyHere($_.FullName)\}
You can even put the PowerShell code into a script, as Install-Font.ps1 in Listing 1 shows. This means the only thing you need to do is get a collection of fonts and pipe them into Install-Font.ps1 using code such as
- gci "C:\dsp\Special Fonts\*.ttf" | Install-Font
Note that installing fonts is a privileged operation in Windows Vista. If you run the script from a nonprivileged account, the process won't necessarily fail; the CopyHere attempt triggers the User Account Control (UAC) dialog box, allowing it to work. Unfortunately, this happens for each and every font file in the installation set. I also recently encountered a situation on 64-bit Vista machine in which the UAC dialog box wasn't invoked and the installation silently failed. For these reasons, it's better to open a PowerShell session as administrator and use the script from there to install the fonts without any prompting.
In the book, we were somewhat constrained in the book by space reasons and by the needs of the target audience. But we know that some readers are interested in the most comprehensive possible breakdown of features that are included in each product edition. And while the following is not technically complete—a full features breakdown would be mind-numbingly complex and arguably pointless—what you see here is an exclusive deeper dive than you’ll see anywhere else.
- # Returns an object containing the file's path and its hash as a hexadecimal string.
- # The Provider object must have a ComputeHash method that returns an array of bytes.
- function get-filehash2($file) {
- if ($file -isnot [System.IO.FileInfo]) {
- write-error "'$($file)' is not a file."
- return
- }
- $hashstring = new-object System.Text.StringBuilder
- $stream = $file.OpenRead()
- if ($stream) {
- foreach ($byte in $Provider.ComputeHash($stream)) {
- [Void] $hashstring.Append($byte.ToString("X2"))
- }
- $stream.Close()
- }
- "" | select-object @{Name="Path"; Expression={$file.FullName}},
- @{Name="$($Provider.GetType().BaseType.Name) Hash";
- Expression={$hashstring.ToString()}}
- }
- gci "C:\dsp\Special Fonts\*.ttf" | %\{$fonts.CopyHere($_.FullName)\}
Our goal, of course, is to keep this table as accurate as possible. If you notice any mistakes or missing features, please let us know: Paul Thurrott – Rafael Rivera


