Я думаю, если бы я должен был перепроектировать свой AD снова существует несколько вещей, которые я сделал бы по-другому, но я нашел что:
Пользователи - тезисы Разделения в отделы, но также и с area/s для временного файла или штата агентства. Местоположение для них не будет так же важно как несомненно люди переместятся.
Компьютеры - Разделение они в местоположение и sub местоположения. Т.е. OfficeComputers/LondonOffice/Room103 (Финансы). Это означает, что можно применить настройки к одному местоположению или офису - например, другой прокси-сервер или различные параметры антивирусной защиты (конечно, только если программа управления AV использует AD) - без реорганизации, и надо надеяться не должен будет открывать кучу проблем, которая является петлевой обработкой.
Я также нашел полезным не использовать созданный в пользователях или группах компьютеров, не любых технических вопросах, но именно так что можно легко видеть, где вещи не должны быть.
Наконец, разделите свои серверы также, я пошел для местоположения/роли, которое, кажется, работало вполне хорошо.
В звездочке $[]
выражение, неопределенные переменные не возвращают неявную пустую строку или нуль. Они не расширяются как "ничто" до оценки выражения, поэтому после того, как переменная расширена (ни к чему), это не видимо к синтаксическому анализатору выражения. Это вызывает ошибку, уже отмеченную Pablo Alsina:
GotoIf("IAX2/AtlantaTeliax-10086", "?CLOSED,1")
Существует два способа избежать этого:
$[]
выражение, включите свои переменные и литералы с двойными кавычками. Это заставит неопределенную переменную быть обработанной как пустая строка, которая может все еще использоваться в целях сравнения.Лично, я пытаюсь сделать обоих. Например:
exten => START,n,Set(FORCE_CLOSED=FALSE)
exten => START,n,GotoIf($["${FORCE_CLOSED}"="TRUE"]?CLOSED,1)
Отметьте двойные кавычки вокруг ${FORCE_CLOSED}
и сравнительное значение. Даже если переменная будет неопределенной, то выражение будет иметь ""
(пустая строка) для сравнения с "TRUE"
.
Действительно, можно использовать любой символ, который Вы любите, потому что он будет просто прикреплен на переменное расширение. Это просто дает Вам литеральное значение, которое, как гарантируют, будет там в случае, если переменная является неопределенной. Мне нравятся кавычки, потому что это заставляет код напомнить другие языки программирования. Вы могли столь же легко использовать что-то как $[x${FORCE_CLOSED}=xTRUE]
, который обычно замечается в сценариях Оболочки Bourne. Конечным результатом является то же.
Вот то, что я могу сказать Вам.
yyerror является ошибкой из синтаксического анализатора, сгенерированного yacc.
Ошибка жалуется на =. Таким образом, кажется, что, на той строке, = конструкция, которую не поддерживает грамматика.
Удача на serverfault.com, куда этот вопрос направляется...
Кто определяет $ {FORCE_CLOSED}?
Из того, что я вижу, кажется, что та переменная иногда не получает начальное значение, и затем повышения синтаксического анализатора и ошибку, когда Вы оцениваете
GotoIf("IAX2/AtlantaTeliax-10086", "?CLOSED,1")
Проверьте, что вызовы, который повышает ошибку, имеют рыночную стоимость для FORCE_CLOSED
EXISTS()
иISNULL()
функции. Оба берут " data" как их аргумент, не имя переменной, таким образом, они - not' t действительно тестирующий переменную так как, до чего расширяется переменная. Они, кажется, противоположности друг друга, сEXISTS()
возврат 1 если " data" что-либо вообще, иISNULL()
возврат 1 если " data" ничто. – James Sneeringer 16 April 2010 в 18:49