Потеряйте круглые скобки и запятые.
Вызывание Вашей функции как:
$s = CreateAppPoolScript "name" "user" "pass"
дает:
cscript adsutil.vbs CREATE "w3svc/AppPools/name" IIsApplicationPool
cscript adsutil.vbs SET "w3svc/AppPools/name/WamUserName" "user"
cscript adsutil.vbs SET "w3svc/AppPools/name/WamUserPass" "pass"
cscript adsutil.vbs SET "w3svc/AppPools/name/AppPoolIdentityType" 3
Позитивный прогноз - это то, что вы ищете. Регулярное выражение выглядит так:
(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]+
Здесь (? =. * [A-Za-z])
- это положительный просмотр вперед, который утверждает, что ваша строка как , по крайней мере, один символ , а (? =. * [0-9])
утверждает, что он имеет по крайней мере одну цифру . Важно отметить, что положительный просмотр вперед не возвращает совпадение, а скорее утверждает, существует ли совпадение или нет. Итак, предыдущее регулярное выражение следует читать как «утверждать, что в нем есть хотя бы один символ; утверждать, что в нем есть хотя бы одна цифра; теперь, когда мы знаем, что утверждения прошли, просто проверьте наличие буквенно-цифровых символов».
Это очень интересно потому что он позволяет легко комбинировать требования к валидации вашего приложения, не усложняя регулярное выражение.
Если вы хотите, чтобы это было в одном регулярном выражении, вы можете использовать "[a-zA-Z]. * \\ d | \\ d. * [A-zA-Z]"
хотя две отдельные проверки могут быть более удобочитаемыми.
Изменить: подход с двумя проверками, который я считаю вполне читаемым, может выглядеть так:
Regex.IsMatch(password, "\\d") && Regex.IsMatch(password, "[a-zA-Z]")
bool isValid = Regex.IsMatch(password, @"[a-zA-Z]") &&
Regex.IsMatch(password, @"\d");