You have installed Windows Server 2012 R2 on Hyper-V. Added a network adapter. Depending on situation, you have also configured static IP address to your network adapter. Then finally when you tried to run ping command to the Hyper-V, it shows "Request timed out.".
At that point of time you might have been wandering is it something when wrong with the network configuration. But fear not, it was actually by default the windows firewall prevent ping command issued to the server.
This obviously can be solved by turning off your windows firewall. But you won't want to do that due to some security concern. So, without actually turning off your firewall, you can change the existing windows firewall inbound rules.
1) Open up your Windows Firewall with Advanced Security. It is located at,
- Control Panel > Windows Firewall > Advanced Settings, or
- Control Panel > Administrative Tools > Windows Firewall with Advanced Security, or
- Run the command "wf.msc" in your command prompt, or
- Run the command "wf.msc" in your Run window.
3) Select Inbound Rules located at the left panel. At middle panel, look for File and Printer Sharing (Echo Request - ICMPv4-In). Right click on it and select Enable Rule. If you require to ping through IPv6, then you can enable rule for File and Printer Sharing (Echo Request - ICMPv6-In). Wait for the icon beside the rule to turn green.
That's all for the configuration. By now you should be able to run ping command to your Windows running in Hyper-V.
For more details, visit http://blog.blksthl.com/2012/11/20/how-to-enable-ping-in-windows-server-2012/
▼
Tuesday, 29 July 2014
Saturday, 26 July 2014
[Windows Server 2012 R2] Configure Remote Access to Hyper-V with Multiple Session per User
It is possible to configure same user to have different session when remote access to the same server in Hyper-V. This is of course can be done on a real physical server, but it is advisable to try it out in Hyper-V before messing up the physical server.
Before proceed, ensure that your Hyper-V have network connection and have enabled remote access. Enable Remote Access : http://jaryl-lan.blogspot.com/2014/07/windows-server-2012-r2-enable-disable.html
Enable Internet Access : http://jaryl-lan.blogspot.com/2014/07/configure-internet-access-for-hyper-v.html
To enable multiple session per user.
1) In your Hyper-V Server, open up registry editor.
2) Navigate to the following, HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer.
3) Look for fSingleSessionPerUser. If it does not exist, create DWORD with the name fSingleSessionPerUser.
4) Right click on fSingleSessionPerUser and click modify.
5) Set the value to 0 and click OK. It will then enable same user to have different session.
6) If you want to revert back the setting for each user to have only one session, then just change the value to 1.
For more detail can be found here http://remotedesktoprdp.com/force-single-session-allow-multiple-sessions-per-user
After you have done configure. You can then open up 2 remote desktop window accessing to the same Hyper-V Server with the same user.
If you have previously remote access but did not log off the user session. The next time when you remote access with the same user, a Windows sign-in window will prompt to choose which session to access.
In the task manager under Users tab, you can see the number of user's session that have previously log on without logging off and its current status.
Before proceed, ensure that your Hyper-V have network connection and have enabled remote access. Enable Remote Access : http://jaryl-lan.blogspot.com/2014/07/windows-server-2012-r2-enable-disable.html
Enable Internet Access : http://jaryl-lan.blogspot.com/2014/07/configure-internet-access-for-hyper-v.html
To enable multiple session per user.
1) In your Hyper-V Server, open up registry editor.
2) Navigate to the following, HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer.
3) Look for fSingleSessionPerUser. If it does not exist, create DWORD with the name fSingleSessionPerUser.
4) Right click on fSingleSessionPerUser and click modify.
5) Set the value to 0 and click OK. It will then enable same user to have different session.
6) If you want to revert back the setting for each user to have only one session, then just change the value to 1.
For more detail can be found here http://remotedesktoprdp.com/force-single-session-allow-multiple-sessions-per-user
After you have done configure. You can then open up 2 remote desktop window accessing to the same Hyper-V Server with the same user.
If you have previously remote access but did not log off the user session. The next time when you remote access with the same user, a Windows sign-in window will prompt to choose which session to access.
In the task manager under Users tab, you can see the number of user's session that have previously log on without logging off and its current status.
[Windows Server 2012 R2] Enable / Disable Remote Access to Hyper-V Windows Server 2012 R2
To enable / disable remote access to Hyper-V Windows Server 2012 R2, it is actually quite simple. But it is also essential for your Hyper-V to have network connection to be able to remote access, or else enabling remote access will still not be able remote access to the server since there's no connection.
There are couple of ways to enable / disable remote access and the settings are pretty much similar across different windows server version and edition.
Alternative 1 : Execute command in command prompt.
1) In your Hyper-V Server, open up a command prompt. Up to you to use the run command or navigate to the command prompt location to open up the command prompt.
2) To enable, type "C:\Windows\System32\scregedit.wsf /ar 0" without double quote and click enter. If your installed windows is not in C drive, just change C to the drive letter that contain your installed windows.
3) To disable, just change 0 to 1 "C:\Windows\System32\scregedit.wsf /ar 1" without double quote and click enter. If your installed windows is not in C drive, just change C to the drive letter that contain your installed windows.
For more detail can be found here http://technet.microsoft.com/en-us/library/jj647785.aspx
Alternative 2 : Using Graphical User Interface.
1) In your Hyper-V Server, navigate to your System window. It can be located from
This PC > System Properties, or
Control Panel > System, or
any other possible way which is more convenient for you.
2) Click Advance system settings located at left panel in your System window. System Properties window will appear.
3) Click on Remote Tab. Under Remote Desktop, to enable remote access, select "Allow remote connections to this computer", leave the default check box checked and click OK button. If you want to define which user are allowed to remote access, you can define it at the Select Users... button.
4) To disable remote access, select "Don't allow remote connections to this computer" and click OK button.
That's all for the configuration part and now you can try remote access to your Hyper-V Server.
1) From your server that hosted the Hyper-V Server, open up the remote desktop connection window.
2) Fill in your Hyper-V Server's computer name and click connect.
3) Fill up the necessary credentials and click OK button. You will then successfully access to your Hyper-V Server with remote access.
There are couple of ways to enable / disable remote access and the settings are pretty much similar across different windows server version and edition.
Alternative 1 : Execute command in command prompt.
1) In your Hyper-V Server, open up a command prompt. Up to you to use the run command or navigate to the command prompt location to open up the command prompt.
2) To enable, type "C:\Windows\System32\scregedit.wsf /ar 0" without double quote and click enter. If your installed windows is not in C drive, just change C to the drive letter that contain your installed windows.
3) To disable, just change 0 to 1 "C:\Windows\System32\scregedit.wsf /ar 1" without double quote and click enter. If your installed windows is not in C drive, just change C to the drive letter that contain your installed windows.
For more detail can be found here http://technet.microsoft.com/en-us/library/jj647785.aspx
Alternative 2 : Using Graphical User Interface.
1) In your Hyper-V Server, navigate to your System window. It can be located from
This PC > System Properties, or
Control Panel > System, or
any other possible way which is more convenient for you.
2) Click Advance system settings located at left panel in your System window. System Properties window will appear.
3) Click on Remote Tab. Under Remote Desktop, to enable remote access, select "Allow remote connections to this computer", leave the default check box checked and click OK button. If you want to define which user are allowed to remote access, you can define it at the Select Users... button.
4) To disable remote access, select "Don't allow remote connections to this computer" and click OK button.
That's all for the configuration part and now you can try remote access to your Hyper-V Server.
1) From your server that hosted the Hyper-V Server, open up the remote desktop connection window.
2) Fill in your Hyper-V Server's computer name and click connect.
3) Fill up the necessary credentials and click OK button. You will then successfully access to your Hyper-V Server with remote access.
Wednesday, 23 July 2014
Configure Internet Access for Hyper-V in Windows Server 2012 R2
If you owned a Windows Server 2012 R2 and have Installed Windows Server 2012 R2 into your Hyper-V and want to have internet access, you may follow the following steps to setup the network configuration.
Step 1 : At Hyper-V Manager window click on Virtual Switch Manager... located at right side of the panel.
Step 2 : At Virtual Switch Manager window, select New virtual network switch on the left panel, select External on the right panel and click Create Virtual Switch.
Step 3 : Fill in the name field with your desired name. Under Connection type category, select External network radio button and choose your LAN network card in the drop down menu. Leave the check box "Allow management operating system to share this network adapter" checked and click OK button.
Step 4 : By now you will have one additional adapter in your Network Connections window Located at Control Panel\Network and Internet\Network Connections.
Step 5 (Optional) : You will now need to enable Internet connection sharing by checking the option "Allow other network users to connect through this computer's Internet connection". Enable it from the adapter that have internet connection.
Step 6 : Back to your Hyper-V Manager window. Right click on the virtual machine that you want to have internet connection and click Settings...
Step 7 : Select Add Hardware on the left panel, select Network Adapter at right panel and click Add button.
Step 8 : For your Virtual Switch drop down menu, select your created external network adapter that you have done in Step 2 and 3. Click on OK button. By now your virtual machine should have internet connection. If end up like the figure below or no internet connection, proceed to step 9.
Step 9 : In your Virtual Machine, configure a static IP address for your adapter. Located at your adapter's properties > Internet Protocol Version 4 (TCP/IPv4) > Click Properties button. Set the Default gateway [192.168.137.1] (Since the shared internet connection pre-configure the IP address to be 192.168.137.1). Set Subnet mask [255.255.255.0]. Set IP address [192.168.137.XX] (XX - Any value other than 1). You may leave the DNS as blank or any of your desired DNS server. The figure below is using google DNS. After done fill up the fields, apply your settings by clicking on OK button. Now you will have Internet connection.
That's all for the configuration.
Step 1 : At Hyper-V Manager window click on Virtual Switch Manager... located at right side of the panel.
Step 2 : At Virtual Switch Manager window, select New virtual network switch on the left panel, select External on the right panel and click Create Virtual Switch.
Step 3 : Fill in the name field with your desired name. Under Connection type category, select External network radio button and choose your LAN network card in the drop down menu. Leave the check box "Allow management operating system to share this network adapter" checked and click OK button.
Step 4 : By now you will have one additional adapter in your Network Connections window Located at Control Panel\Network and Internet\Network Connections.
Step 5 (Optional) : You will now need to enable Internet connection sharing by checking the option "Allow other network users to connect through this computer's Internet connection". Enable it from the adapter that have internet connection.
Step 6 : Back to your Hyper-V Manager window. Right click on the virtual machine that you want to have internet connection and click Settings...
Step 7 : Select Add Hardware on the left panel, select Network Adapter at right panel and click Add button.
Step 8 : For your Virtual Switch drop down menu, select your created external network adapter that you have done in Step 2 and 3. Click on OK button. By now your virtual machine should have internet connection. If end up like the figure below or no internet connection, proceed to step 9.
Step 9 : In your Virtual Machine, configure a static IP address for your adapter. Located at your adapter's properties > Internet Protocol Version 4 (TCP/IPv4) > Click Properties button. Set the Default gateway [192.168.137.1] (Since the shared internet connection pre-configure the IP address to be 192.168.137.1). Set Subnet mask [255.255.255.0]. Set IP address [192.168.137.XX] (XX - Any value other than 1). You may leave the DNS as blank or any of your desired DNS server. The figure below is using google DNS. After done fill up the fields, apply your settings by clicking on OK button. Now you will have Internet connection.
That's all for the configuration.
Saturday, 19 July 2014
Publish Database Project from Microsoft Visual Studio 2013 to Microsoft SQL Server 2014 [Unable to connect to target server]
Update: This post also applies to solving issue for publishing database project to Microsoft SQL Server 2016.
You may have wanted to publish your database project to your newly installed Microsoft SQL Server 2014, but end up with this message "Unable to connect to target server". This is due to your current SQL Server Data Tools does not support publishing to SQL Server 2014. [Thanks to Sylvester Lee for pointing out that the current version Data Tools needs to update.] To solve this, you need to update your SQL Server Data Tools.
In your Visual Studio, navigate to your database project properties by right click on your database project and select properties. Select Project Settings tab. Under Target platform, check the drop down list whether it contain SQL Server 2014 selection. If it is not there, then you need to install SQL Server Data Tools.
Go to Extensions and Updates by select Tools at menu bar, which is located at the top of your Visual Studio window and click Extensions and Updates...
At Extensions and Updates Window, select Updates tab and select Product Updates sub tab. At middle of the window, select Microsoft SQL Server Update for database... and click Update button.
You will then be prompt to download SQL Server Data Tools.
Save it to keep a copy in your local machine to install it on a later date or run it immediately. The installation is pretty much straightforward and remember to read the terms and conditions before proceed with the installation.
Once you have done the installation, exit all your visual studio. Open back your project that contain the database project. You may have receive a prompt window to upgrade your project. Accept it by select OK button.
Check on the target platform at your database project properties. It should have contain SQL Server 2014 in the selection. Select the SQL Server 2014, save your properties and publish your project. By now your database project should be able to successfully publish to SQL Server 2014.
You may want to verify it in SQL Server Management Studio.
That all you have to do.
You may have wanted to publish your database project to your newly installed Microsoft SQL Server 2014, but end up with this message "Unable to connect to target server". This is due to your current SQL Server Data Tools does not support publishing to SQL Server 2014. [Thanks to Sylvester Lee for pointing out that the current version Data Tools needs to update.] To solve this, you need to update your SQL Server Data Tools.
In your Visual Studio, navigate to your database project properties by right click on your database project and select properties. Select Project Settings tab. Under Target platform, check the drop down list whether it contain SQL Server 2014 selection. If it is not there, then you need to install SQL Server Data Tools.
Go to Extensions and Updates by select Tools at menu bar, which is located at the top of your Visual Studio window and click Extensions and Updates...
At Extensions and Updates Window, select Updates tab and select Product Updates sub tab. At middle of the window, select Microsoft SQL Server Update for database... and click Update button.
You will then be prompt to download SQL Server Data Tools.
Save it to keep a copy in your local machine to install it on a later date or run it immediately. The installation is pretty much straightforward and remember to read the terms and conditions before proceed with the installation.
Once you have done the installation, exit all your visual studio. Open back your project that contain the database project. You may have receive a prompt window to upgrade your project. Accept it by select OK button.
Check on the target platform at your database project properties. It should have contain SQL Server 2014 in the selection. Select the SQL Server 2014, save your properties and publish your project. By now your database project should be able to successfully publish to SQL Server 2014.
You may want to verify it in SQL Server Management Studio.
That all you have to do.
Thursday, 17 July 2014
Openfire BlowFish Encryption/Decryption Implementation Converted From Java to C#
Have you been using Openfire and requires to create XMPP users using C# but kind of unable to encrypt/decrypt the password? Openfire is actually using blowfish for encryption/decryption of password and you can pretty much find a few blowfish implementation on C# out there. But when you actually tried to decrypt the password obtained from the Openfire database, you will notice that you will not be able to obtain the original password. This is due to Openfire implementation of blowfish is different.
So to deal with this, I have converted the blowfish class from the Openfire source project, which is in java language and you can obtain from here http://www.igniterealtime.org/downloads/source.jsp.
It is actually pretty simple to use.
Initialize with key.
Encrypt plain text.
Decrypt cipher text.
Do take note that the encrypted text will always be different, but it will still be able to decrypt back to the original text.
Here's the source file in C# https://onedrive.live.com/redir?resid=E6612168B803803D!353&authkey=!AA3SEAg16NdoiZ0&ithint=file%2czip
So to deal with this, I have converted the blowfish class from the Openfire source project, which is in java language and you can obtain from here http://www.igniterealtime.org/downloads/source.jsp.
It is actually pretty simple to use.
Initialize with key.
Blowfish blowfish = new Blowfish("Your
Key Here");
Encrypt plain text.
string cipherText =
blowfish.encryptString("Your Plain Text Here");
Decrypt cipher text.
string plainText =
blowfish.decryptString("Your Cipher Text Here");
Do take note that the encrypted text will always be different, but it will still be able to decrypt back to the original text.
Here's the source file in C# https://onedrive.live.com/redir?resid=E6612168B803803D!353&authkey=!AA3SEAg16NdoiZ0&ithint=file%2czip
Tuesday, 1 July 2014
Self Define Data Type for Each Columns from Reading Text Files with Schema.ini using OleDB in C# & VB
Have you been using Oledb to read text files and come across a situation where you want to define each of the columns data types instead of letting it auto define for you. You can actually use a file called Schema.ini and place it in the same folder with the text file that you want to read.
Here's what your schema.ini should contain.
- File name including extension but excludes folder path. The file name is enclosed in a square bracket.
- Whether your file contain header or only data.
- The file format type [csv, tab, etc...]
- The list of columns and its data type.
So let's say in a case where you want all your data types to be in a string format, it will look like the following in your schema.ini.
[Tables.csv]
ColNameHeader=True
Format=CSVDelimited
Col1="Description" Text
Col2=Red Text
Col3=Green Text
Col4=Blue Text
The column defined are in sequences from left to right based on the columns in your text file. So if you did not specify the column sequence correctly, then schema.ini will define the data type wrongly. Also, The column name need to be enclosed in double quotation if it contains a space.
Once finish construct the schema.ini, place it together with the text file that you going to read. Then just read your text file like what you normally did with Oledb. You will notice that the value obtained for each columns are in string.
The following are the code for reading the comma delimited file with header and display it out. It will loop through the comma delimited file content and populate it to the Table class.
[C#]
[VB]
This example is just to demonstrate how you can define each of the columns' data type. It is advisable to define a correct data type for the column, so that you don't have to do unnecessary data conversion.
If you get hit with the error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.". Please install Microsoft Access Database Engine 2010 x86.
More on how to construct your own Schema.ini can be found on the following link : http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx
Source code can be obtained here: https://onedrive.live.com/redir?resid=E6612168B803803D!355&authkey=!AOcpGnFSW310zJ0&ithint=file%2czip
Github: https://github.com/Jaryllan/Demonstration-Oledb-With-Schema
Here's what your schema.ini should contain.
- File name including extension but excludes folder path. The file name is enclosed in a square bracket.
- Whether your file contain header or only data.
- The file format type [csv, tab, etc...]
- The list of columns and its data type.
So let's say in a case where you want all your data types to be in a string format, it will look like the following in your schema.ini.
[Tables.csv]
ColNameHeader=True
Format=CSVDelimited
Col1="Description" Text
Col2=Red Text
Col3=Green Text
Col4=Blue Text
The column defined are in sequences from left to right based on the columns in your text file. So if you did not specify the column sequence correctly, then schema.ini will define the data type wrongly. Also, The column name need to be enclosed in double quotation if it contains a space.
Once finish construct the schema.ini, place it together with the text file that you going to read. Then just read your text file like what you normally did with Oledb. You will notice that the value obtained for each columns are in string.
The following are the code for reading the comma delimited file with header and display it out. It will loop through the comma delimited file content and populate it to the Table class.
[C#]
static void
Main(string[] args)
{
var
tables = ListTables(Path.Combine(Environment.CurrentDirectory,
"TestFile", "Tables.csv"));
foreach
(var table in
tables)
{
Console.WriteLine(string.Format("Description:
{0}", table.Description));
Console.WriteLine(string.Format("Red:
{0}", table.Red));
Console.WriteLine(string.Format("Green:
{0}", table.Green));
Console.WriteLine(string.Format("Blue:
{0}\n", table.Blue));
}
Console.ReadKey();
}
private static List<Table>
ListTables(string fileName)
{
var
tables = new List<Table>();
var
fileInfo = new FileInfo(fileName);
const string
SQL_STATEMENT = "SELECT * FROM [{0}]";
using
(var con = new OleDbConnection(string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data
Source={0};Extended Properties='text; HDR=YES;'",
fileInfo.DirectoryName)))
{
con.Open();
using
(var cmd = new OleDbCommand(string.Format(SQL_STATEMENT,
fileInfo.Name), con))
{
using
(var reader = cmd.ExecuteReader())
{
while
(reader.Read())
{
var
table = new Table();
table.Description =
reader.GetValue(reader.GetOrdinal("Description")).ToString();
table.Red =
reader.GetValue(reader.GetOrdinal("Red")).ToString();
table.Green =
reader.GetValue(reader.GetOrdinal("Green")).ToString();
table.Blue =
reader.GetValue(reader.GetOrdinal("Blue")).ToString();
tables.Add(table);
}
}
}
}
return
tables;
}
[VB]
Sub
Main()
Dim
tables As List(Of Table)
= ListTables(Path.Combine(Environment.CurrentDirectory,
"TestFile", "Tables.csv"))
For Each
table As Table In
tables
Console.WriteLine(String.Format("Description:
{0}", table.Description))
Console.WriteLine(String.Format("Red:
{0}", table.Red))
Console.WriteLine(String.Format("Green:
{0}", table.Green))
Console.WriteLine(String.Format("Blue:
{0}" + Environment.NewLine,
table.Blue))
Next
Console.ReadKey()
End Sub
Private Function
ListTables(ByVal fileName As String)
As List(Of Table)
Dim
tables As List(Of Table)
= New List(Of Table)
Dim
fileInfo As FileInfo
= New FileInfo(fileName)
Const
SQL_STATEMENT As String
= "SELECT * FROM [{0}]"
Using
con As OleDbConnection
= New OleDbConnection(String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data
Source={0};Extended Properties='text; HDR=YES;'",
fileInfo.DirectoryName))
con.Open()
Using
cmd As OleDbCommand
= New OleDbCommand(String.Format(SQL_STATEMENT,
fileInfo.Name), con)
Using
reader As OleDbDataReader
= cmd.ExecuteReader()
While
reader.Read
Dim
table As Table
= New Table()
table.Description =
reader.GetValue(reader.GetOrdinal("Description")).ToString()
table.Red =
reader.GetValue(reader.GetOrdinal("Red")).ToString()
table.Green =
reader.GetValue(reader.GetOrdinal("Green")).ToString()
table.Blue =
reader.GetValue(reader.GetOrdinal("Blue")).ToString()
tables.Add(table)
End While
End Using
End Using
End Using
Return
tables
End Function
This example is just to demonstrate how you can define each of the columns' data type. It is advisable to define a correct data type for the column, so that you don't have to do unnecessary data conversion.
If you get hit with the error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.". Please install Microsoft Access Database Engine 2010 x86.
More on how to construct your own Schema.ini can be found on the following link : http://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx
Source code can be obtained here: https://onedrive.live.com/redir?resid=E6612168B803803D!355&authkey=!AOcpGnFSW310zJ0&ithint=file%2czip
Github: https://github.com/Jaryllan/Demonstration-Oledb-With-Schema