Skip to content

Commit add7d31

Browse files
Fix: Allow dashes in SQL Server instance names (#27)
- Updated InstanceName and InstanceNameEx regex patterns in RegexHelper.cs to include the dash/hyphen character (\-) - Added two test cases to verify instance names with dashes work correctly - Fixes issue where instance names like "My-TestInstance" were incorrectly rejected as invalid This resolves the parsing error when using instance names containing dashes, which are valid according to SQL Server naming rules. Fixes #13 🤖 Generated with [Claude Code](https://claude.ai/code) Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
1 parent 486b34f commit add7d31

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

project/dbatools.Tests/Parameter/DbaInstanceParamaterTest.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,5 +202,41 @@ public void TestLocalhost(string localhost)
202202
Assert.AreEqual(SqlConnectionProtocol.Any, dbaInstanceParamater.NetworkProtocol);
203203
Assert.IsTrue(dbaInstanceParamater.IsLocalHost);
204204
}
205+
206+
/// <summary>
207+
/// Checks that instance names with dashes are properly parsed
208+
/// </summary>
209+
[TestMethod]
210+
public void TestInstanceNameWithDash()
211+
{
212+
var dbaInstanceParamater = new DbaInstanceParameter("My-Instance.domain.local\\My-TestInstance");
213+
214+
Assert.AreEqual("My-Instance.domain.local", dbaInstanceParamater.ComputerName);
215+
Assert.AreEqual("My-TestInstance", dbaInstanceParamater.InstanceName);
216+
Assert.AreEqual("My-Instance.domain.local\\My-TestInstance", dbaInstanceParamater.FullName);
217+
Assert.AreEqual("My-Instance.domain.local\\My-TestInstance", dbaInstanceParamater.FullSmoName);
218+
Assert.AreEqual("[My-Instance.domain.local]", dbaInstanceParamater.SqlComputerName);
219+
Assert.AreEqual("[My-TestInstance]", dbaInstanceParamater.SqlInstanceName);
220+
Assert.AreEqual("[My-Instance.domain.local\\My-TestInstance]", dbaInstanceParamater.SqlFullName);
221+
Assert.IsFalse(dbaInstanceParamater.IsConnectionString);
222+
}
223+
224+
/// <summary>
225+
/// Checks that server names with dashes work correctly (regression test)
226+
/// </summary>
227+
[TestMethod]
228+
public void TestServerNameWithDash()
229+
{
230+
var dbaInstanceParamater = new DbaInstanceParameter("My-Instance.domain.local\\MyTestInstance");
231+
232+
Assert.AreEqual("My-Instance.domain.local", dbaInstanceParamater.ComputerName);
233+
Assert.AreEqual("MyTestInstance", dbaInstanceParamater.InstanceName);
234+
Assert.AreEqual("My-Instance.domain.local\\MyTestInstance", dbaInstanceParamater.FullName);
235+
Assert.AreEqual("My-Instance.domain.local\\MyTestInstance", dbaInstanceParamater.FullSmoName);
236+
Assert.AreEqual("[My-Instance.domain.local]", dbaInstanceParamater.SqlComputerName);
237+
Assert.AreEqual("[MyTestInstance]", dbaInstanceParamater.SqlInstanceName);
238+
Assert.AreEqual("[My-Instance.domain.local\\MyTestInstance]", dbaInstanceParamater.SqlFullName);
239+
Assert.IsFalse(dbaInstanceParamater.IsConnectionString);
240+
}
205241
}
206242
}

project/dbatools/Utility/RegexHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,12 @@ public static class RegexHelper
5353
/// <summary>
5454
/// Will match a mostly valid instance name.
5555
/// </summary>
56-
public static string InstanceName = @"^[\p{L}&_#][\p{L}\d\$#_]{0,15}$";
56+
public static string InstanceName = @"^[\p{L}&_#][\p{L}\d\$#_\-]{0,15}$";
5757

5858
/// <summary>
5959
/// Will match any instance of a mostly valid instance name.
6060
/// </summary>
61-
public static string InstanceNameEx = @"[\p{L}&_#][\p{L}\d\$#_]{0,15}";
61+
public static string InstanceNameEx = @"[\p{L}&_#][\p{L}\d\$#_\-]{0,15}";
6262

6363
/// <summary>
6464
/// Matches a word against the list of officially reserved keywords

0 commit comments

Comments
 (0)