Thursday, January 30, 2014

SQL 2012 and Scale-out-file-server. Unable to Attach a Database

Working with a client with an installation of a Clustered SQL 2012 R2 servers with a Clustered File Server providing SMB3 shares to a Scale-Out-File-Server, we discovered that we could not attach an existing Database file.

The error message is:
Cannot access the specified path or file on the server. Verify that you have the necessary security privileges and that the path or file exists.

As a test, we can create a new database, verify that it exists, detach it, and then immediately try to re-attach it, and we get the error.

We of course have verified that the Administrative User, the SQL Service Account, and the Computers all have full rights to this data directory.

We opened a case with Microsoft, and after 4 hours on the phone, were told that this appears to be a bug when using a UNC, presumably on a Scale-out-file-Server, for our data.

The workaround is to use a SQL command to attach the database instead.



Create database OldData On
              (Filename = '\\sqlserver-1\SQLServer-Data\SQLdata-1\Data\OldData.mdf'),
              (Filename ='\\sqlserver-1\SQLServer-Data\SQLdata-1\Logs\OldData_log.ldf')
for ATTACH

Friday, January 10, 2014

Internet Explorer 11 (Windows 8.1) "Google Bug". Back Button hangs IE

I discovered this week that there is a bug in Google's web page that causes Internet Explorer 11 to hang when you click the back button.

The specific scenario is that when you start on Google's web page, and go to a link of some sort, it can trigger this bug when you click back to return to google. 

This is fairly well documented on some forums, in that it has been like this for a while, and Google seems unwilling, or unable, to modify their code to not trigger this bug. I do not consider it a IE11 bug as much as I consider it a problem with Google.  Microsoft should of course fix their issue, but also you would think that Google might take this seriously. 

To trigger the issue, Go to google.com and search for something that takes you to a Microsoft page.  Example: "Exchange edge server".  Click on the first link and then click on any link on that Microsoft page.  Then click back twice.  The first "back" will work fine because it takes you to the original Microsoft page.  Now click Back again.  IE will eventually display (Not responding) on the status line, and you will need to force a closure of the browser.

I do not know of any workaround, other than to always open any link on the Google web page with a right-click and "Open new tab", or even easier is to use another browse such as Firefox.

Before anyone flames me, I did do all of the standard things such as:

SMTP and Spamhaus blocking. What I learned today.

I was setting up a new client with an Exchange Server, and we discovered that we could not send email to any Microsoft Hosted email addresses.  Basically, to a subdomain of Outlook.com.

All office 365 hosted email domain are subdomains of this address. 

The issue was discovered when we tried to send an email manually using a text based email tool.
The dialog looks like this (note that the unique data has been modified for privacy):

blat.exe -body "this is a test" -to someone@o365hosted.ca -server o365hosted.mail.protection.outlook.com -f me@legit.ca -s "Test of SMTP" -debug
Blat v3.1.1 (build : Feb 27 2013 20:04:23)
32-bit Windows, Full, Unicode

<<6:46 +0000
>>>putline>>> EHLO lab1-exch2013
<<<<... Text removed for clarity

<<Sending stdin.txt to someone@o365hosted.ca
Subject: Test of SMTP
Login name is
Me@legit.ca
>>>putline>>> MAIL FROM:<Me@legit.ca>
<<>>>putline>>> RCPT TO:<someone@o365hosted.ca
>
<<http://www.spamhaus.org/lookup.lasso
*** Warning ***  The SMTP server does not like the name someone@o365hosted.ca.
*** Warning ***  Have you set the 'To:' field correctly, or do you need authorization (-u/-pw) ?
*** Warning ***  The SMTP server response was -> 550 5.7.1 Service unavailable; Client host [123.45.67.89] blocked using Spamhaus; To request removal from this list see
http://www.spamhaus.org/lookup.lasso
>>>putline>>> QUIT
<<


The IP address (not shown) was a static IP assigned to a Telus.Net client.

A quick check at MXToolbox.com revealed that blocked at Spamhaus, and SORBS, but no others.
Next, a check at Spamhaus indicated that the IP Address is listed in the PBL.   What is the PBL you say?  It is a list of addresses that require Authentication or discrete PTR records in order to be trusted.
See https://www.spamhaus.org/lookup/ and enter your IP address for a lookup.
In my case is says:
          

By default, this assumes that the IP is a Dynamically Assigned IP.  In our case of course, from Telus.

There are 2 solutions for our problem of being able to send to any email domain by MX record.
  1. We could go to Telus and request a discrete PTR record, or
  2. we can simple configure the Exchange Send Connector to use the SMTP Smart host of smtp.telus.net.
Update: For Hosted Exchange Hybrid, the above 2 are not options.  Working on a solution..


Thursday, December 5, 2013

How to configure Primary DC to sync time with an external Time Source

This article explains how to configure your Windows Server 2008 R2 Active Directory Primary Domain Controller to synchronize time with an external time source.
Note: In an active directory, all member computers will sync time with the PDC, so you only need to setup an external time source on the PDC.
Open an elevated command prompt and type the following:

Net Stop W32Time
W32tm /config /syncfromflags:manual /manualpeerlist:""
W32tm /config /reliable:yes
Net Start W32Time
W32tm /config /update
W32tm /resync

You can run W32tm /resync on member computers to sync time with the PDC.

A good reliable time source to use is pool.ntp.org.

Check out the NTP Project for world wide time sources.

Also note:  from Microsoft:
http://support.microsoft.com/kb/816042

Monday, November 25, 2013

Powershell Tricks and Notes

How to expand parameterizedProperty

Note if you issue the following command:

Get-ADComputer -Filter * |Get-Member

You will get the following result:
  TypeName: Microsoft.ActiveDirectory.Management.ADComputer

Name              MemberType            Definition
----              ----------            ----------
Contains          Method                bool Contains(string propertyName)
Equals            Method                bool Equals(System.Object obj)
GetEnumerator     Method                System.Collections.IDictionaryEnumerator GetEnumerator()
GetHashCode       Method                int GetHashCode()
GetType           Method                type GetType()
ToString          Method                string ToString()
Item              ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Item(string p...
DistinguishedName Property              System.String DistinguishedName {get;set;}
DNSHostName       Property              System.String DNSHostName {get;set;}
Enabled           Property              System.Boolean Enabled {get;set;}
Name              Property              System.String Name {get;}
ObjectClass       Property              System.String ObjectClass {get;set;}
ObjectGUID        Property              System.Nullable`1[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, ...
SamAccountName    Property              System.String SamAccountName {get;set;}
SID               Property              System.Security.Principal.SecurityIdentifier SID {get;set;}
UserPrincipalName Property              System.String UserPrincipalName {get;set;}



Notice that property "Item".

So when you type:

Get-ADComputer -Filter * -Property * |Get-Member

You hope tp get something that expands the properties of "Item".

Now.  What if you get an error:
PS C:\Data\Scripts> Get-ADComputer -Identity lab17dc1 -property * |gm
Get-ADComputer : One or more properties are invalid.
Parameter name: msDS-AssignedAuthNPolicy
At line:1 char:1
+ Get-ADComputer -Identity lab17dc1 -property * |gm
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (lab17dc1:ADComputer) [Get-ADComputer], ArgumentException
    + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Comm
   ands.GetADComputer


Well that is a big Oops.  It is actually a bug in AD.
Here is a workaround for THIS bug.  To get your properties, do the following:

Get-ADComputer -Identity lab17dc1 |Get-ADObject -properties *|gm

Now you get something like:
    TypeName: Microsoft.ActiveDirectory.Management.ADObject
Name                            MemberType            Definition
----                            ----------            ----------
Contains                        Method                bool Contains(string propertyName)
Equals                          Method                bool Equals(System.Object obj)
GetEnumerator                   Method                System.Collections.IDictionaryEnumerator GetEnumerator()
GetHashCode                     Method                int GetHashCode()
GetType                         Method                type GetType()
ToString                        Method                string ToString()
Item                            ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropertyValueCollection...
accountExpires                  Property              System.Int64 accountExpires {get;set;}
badPasswordTime                 Property              System.Int64 badPasswordTime {get;set;}
badPwdCount                     Property              System.Int32 badPwdCount {get;set;}
CanonicalName                   Property              System.String CanonicalName {get;}
CN                              Property              System.String CN {get;}
codePage                        Property              System.Int32 codePage {get;set;}
countryCode                     Property              System.Int32 countryCode {get;set;}
Created                         Property              System.DateTime Created {get;}
createTimeStamp                 Property              System.DateTime createTimeStamp {get;}
Deleted                         Property              System.Boolean Deleted {get;}
Description                     Property              System.String Description {get;set;}
DisplayName                     Property              System.String DisplayName {get;set;}
DistinguishedName               Property              System.String DistinguishedName {get;set;}
dNSHostName                     Property              System.String dNSHostName {get;set;}
dSCorePropagationData           Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection...
instanceType                    Property              System.Int32 instanceType {get;}
isCriticalSystemObject          Property              System.Boolean isCriticalSystemObject {get;set;}
isDeleted                       Property              System.Boolean isDeleted {get;}
LastKnownParent                 Property              System.String LastKnownParent {get;}
lastLogoff                      Property              System.Int64 lastLogoff {get;set;}
lastLogon                       Property              System.Int64 lastLogon {get;set;}
lastLogonTimestamp              Property              System.Int64 lastLogonTimestamp {get;set;}
localPolicyFlags                Property              System.Int32 localPolicyFlags {get;set;}
logonCount                      Property              System.Int32 logonCount {get;set;}
Modified                        Property              System.DateTime Modified {get;}
modifyTimeStamp                 Property              System.DateTime modifyTimeStamp {get;}
msDFSR-ComputerReferenceBL      Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection...
msDS-GenerationId               Property              System.Byte[] msDS-GenerationId {get;}
msDS-SupportedEncryptionTypes   Property              System.Int32 msDS-SupportedEncryptionTypes {get;set;}
Name                            Property              System.String Name {get;}
nTSecurityDescriptor            Property              System.DirectoryServices.ActiveDirectorySecurity nTSecurityDes...
ObjectCategory                  Property              System.String ObjectCategory {get;}
ObjectClass                     Property              System.String ObjectClass {get;set;}
ObjectGUID                      Property              System.Nullable`1[[System.Guid, mscorlib, Version=4.0.0.0, Cul...
objectSid                       Property              System.Security.Principal.SecurityIdentifier objectSid {get;}
operatingSystem                 Property              System.String operatingSystem {get;set;}
operatingSystemVersion          Property              System.String operatingSystemVersion {get;set;}
primaryGroupID                  Property              System.Int32 primaryGroupID {get;set;}
ProtectedFromAccidentalDeletion Property              System.Boolean ProtectedFromAccidentalDeletion {get;set;}
pwdLastSet                      Property              System.Int64 pwdLastSet {get;set;}
rIDSetReferences                Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection...
sAMAccountName                  Property              System.String sAMAccountName {get;set;}
sAMAccountType                  Property              System.Int32 sAMAccountType {get;set;}
sDRightsEffective               Property              System.Int32 sDRightsEffective {get;}
serverReferenceBL               Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection...
servicePrincipalName            Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection...
userAccountControl              Property              System.Int32 userAccountControl {get;set;}
uSNChanged                      Property              System.Int64 uSNChanged {get;}
uSNCreated                      Property              System.Int64 uSNCreated {get;}
whenChanged                     Property              System.DateTime whenChanged {get;}
whenCreated                     Property              System.DateTime whenCreated {get;}

 

Tuesday, November 12, 2013

Use Excel's conditional formatting to highlight weekends

Use Excel's conditional formatting to highlight weekends

Excellent, simple, article on how to highlight weekends in a spreadsheet.  Includes a sample spreadsheet for downloading.

http://www.techrepublic.com/blog/windows-and-office/use-excels-conditional-formatting-to-highlight-weekends/

Monday, November 11, 2013

Server 2012 R2 - Building a Scale-out File Server

The following checklist details how to set up a Scale-out File Server Cluster in Server 2012 R2.

... DRAFT ...