Design Pattern Question/Violating OCP
I would suggest something like that

public interface IDeviceScript
{
    string Name { get; }
    string SecurityScriptName { get; }
    string BusinessScriptName { get; }
    bool IsScriptApply(IDevice device);
}

public interface IDevice
{
    Locations Location { get; }
    // more methods and properties
}

[Serializable]
[AttributeUsage(AttributeTargets.Class)]
public class DeviceScriptAttribute : Attribute
{
}

[DeviceScript]
public class UnitedStatesScript : IDeviceScript
{
    public string Name
    {
        get { return "US_Script"; }
    }

    public string SecurityScriptName
    {
        get { return "US_SecurityScript"; }
    }

    public string BusinessScriptName
    {
        get { return "US_BusinessScript"; }
    }

    public bool IsScriptApply(IDevice device)
    {
        return device.Location == Locations.US;
    }
}

public IDeviceScript GetScriptForDevice(IDevice device)
{
    IEnumerable&lt;IDeviceScript&gt; deviceScripts =
        Assembly.GetExecutingAssembly()
                .GetTypes()
                .Where(t =&gt; t.GetCustomAttributes&lt;DeviceScriptAttribute&gt;().Any())
                .Select(t =&gt; Activator.CreateInstance(t))
                .Cast&lt;IDeviceScript&gt;();

    foreach (IDeviceScript deviceScript in deviceScripts)
    {
        if (deviceScript.IsScriptApply(device))
        {
            return deviceScript;
        }
    }

    return null;
}


Now you can add more scripts just by adding new classes to your project. No xml configs are required :)

Futher suggestions:


After calculating deviceScripts enumerable once you can store it in some static field for further use.
Name property of IDeviceScript could be moved to DeviceScriptAttribute if you don't need it in your code.
I would make GetScriptForDevice method static but unfortunately .net doesn't support statics in interfaces :(