Install language pack (lp.cab) on Win8 / WinSvr2012

Windows 8 / Windows Server 2012 have changed a lot of UI. The old way for installing a dedicated language pack (lp.cab) does not work any more.

To do the same thing as before, you may love this: \Windows\system32\lpksetup.exe

Source: http://social.technet.microsoft.com/Forums/en-US/w8itproinstall/thread/ef9eada9-2abe-4d3e-8b8f-f66da098e651

C#: Convert a tree node and sub nodes to text

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TreeToText
{
    class TreeToText
    {
        const string LineMid = "├─";
        const string LineLast = "└─";
        const string Line = "│  ";
        const string Space = "    ";

        /// <summary>
        /// Convert a tree node to text
        /// </summary>
        /// <param name="node">Root node to convert</param>
        /// <returns>Text</returns>
        public static string Tree2Text(TreeNode node)
        {
            if (node == null) return null;
            StringBuilder builder = new StringBuilder();
            builder.AppendLine(TreeNodeText(node));
            Tree2Text(builder, node, "");
            return builder.ToString();
        }

        static string TreeNodeText(TreeNode node)
        {
            return node.Text;
        }

        static void Tree2Text(StringBuilder builder, TreeNode parent, string prefix)
        {
            int nodesCount = parent.Nodes.Count;
            if (nodesCount == 0) return;
            int nodeMaxIndex = nodesCount - 1;
            for (int i = 0; i < nodesCount; i++)
            {
                builder.Append(prefix);
                TreeNode node = parent.Nodes[i];
                if (i != nodeMaxIndex)
                {
                    builder.Append(LineMid);
                    builder.AppendLine(TreeNodeText(node));
                    Tree2Text(builder, node, prefix + Line);
                }
                else
                {
                    builder.Append(LineLast);
                    builder.AppendLine(TreeNodeText(node));
                    Tree2Text(builder, node, prefix + Space);
                }
            }
        }
    }
}

Volume Shadow Copy Service error on Windows Server 2012

In many instance of Window Server 2012, there are lots of errors in Event Log about Volume Shadow Copy Service like this:
Volume Shadow Copy Service error: Error creating the Shadow Copy Provider COM class with CLSID {463948d2-035d-4d1d-9bfc-473fece07dab} [0x80070005, Access is denied.].
Operation:
Creating instance of hardware provider
Obtain a callable interface for this provider
List interfaces for all providers supporting this context
Query Shadow Copies
Context:
Provider ID: {3f900f90-00e9-440e-873a-96ca5eb079e5}
Provider ID: {3f900f90-00e9-440e-873a-96ca5eb079e5}
Class ID: {463948d2-035d-4d1d-9bfc-473fece07dab}
Snapshot Context: -1
Snapshot Context: -1
Execution Context: Coordinator

Actually, that may be a bug of Windows Server 2012. You need to and are able to correct it manually by setting up the right credential for related DCOM. You can choose UI or PS to reach that:
UI mode:
1 Open Component Services, open Computers – My Computer – DCOM Config.
2 Locate WTVdsProv and press right mouse key – Properties – Identity, select This user, enter an account name and password with local administrator’s permission.
3 Do the same step for WTSnapshotProvider.
PS mode:
Open PowerShell and use these commands:
$PsCred = Get-Credential
$PrvdIdentityPath = New-Object System.Management.ManagementPath(“root\wmi:WT_iSCSIStorageProviderIdentity”)
$PrvdIdentityClass = New-Object System.Management.ManagementClass($PrvdIdentityPath)
$PrvdIdentityClass.SetProviderIdentity(“{88155B26-CE61-42FB-AF31-E024897ADEBF}”,$PsCred.UserName,$PsCred.GetNetworkCredential().Password)
$PrvdIdentityClass.SetProviderIdentity(“{9D884A48-0FB0-4833-AB70-A19405D58616}”,$PsCred.UserName,$PsCred.GetNetworkCredential().Password)

Source: http://blogs.technet.com/b/filecab/archive/2012/10/08/iscsi-target-storage-vds-vss-provider.aspx

How to migrate WSUS Database from WID to SqlServer on Windows Server 2012

I was trapped in migrating WSUS database from Windows Internal Database to a dedicated SqlServer instance. Due to lots of changes taken in in WSUS and WID of Windows Server 2012, the old way as Windows Server 2008R2 does not work anymore. Finally, I found a solution to do that.
All your needs:
1 A working instance of WSUS, which has a database in WID.
2 SqlServer installation package.
3 Backup before migration.

Migration steps:
1 Install a SqlServer instance. For my case, SqlServer 2012 Express x64 is chosen.
2 Install a SqlServer Management Studio.
3 Log on to this server by LOCAL ADMINISTRATOR. If your server joined a domain, you have to do this by local administrator. No matter your domain account is in local administrators group or not, you cannot do that with a domain account.
4 Open SqlServer Management Studio and connect to server \.\pipe\MICROSOFT##WID\tsql\query using Windows Authentication. You will find a database named SUSDB listed.
5 Stop service WSUS Service and IIS Admin Service.
6 Detach SUSDB. Drop active connections if needed.
7 Log off and log on to this server with your account if you like. You may need an account from local administrators group.
8 Copy database files out from C:\Windows\WID\Data. You need 2 files related to SUSDB.
9 Remove Role Windows Server Update Services and Feature Windows Internal Database. Server will have to reboot after this step.
10 Install removed role and feature again. Choose database instead of WID database. When asked to specify a path for storing updates, use the same file location as before.
11 Finish post deployment but do not open MMC.
12 Open SqlServer Management Studio and connect to the SqlServer instance installed by step 1. You need to run this instance by administrator privilege, or you will get a read-only database in next steps.
13 Stop service WSUS Service and IIS Admin Service.
14 Delete SUSDB database from SqlServer Management Studio.
15 Attach SUSDB from the location where you copied to in step 8.
16 Start service WSUS Service and IIS Admin Service.
17 End.

PS: SqlServer database is not like one in WID, it cannot be backed up by Windows Server Backup. Please choose a separated folder or volume for your database files and setup an agent job to backup them.

中国IP地址段抽取工具

本工具可以将所有中国的IP v4地址段抽取出来,并按照用户给定的格式保存。
通常可以用于制作特定的路由表。

IP信息来源:每次运行时自动获取自APNIC。
运行需要:dotnet Framework 4.0

运行前,请用文本编辑器打开CNRouteExtractor.exe.config,按照注释修改其中的Format字符串。
运行时的格式:CNRouteExtractor filename
将生成filename作为目标输出文件。如不指定filename则不输出(仅测试下载与抽取)。

下载地址