PowerShell 스크립트에서 Windows 사용자 이름의 유효성을 검사하기 위한 다음 정규 표현식이 있습니다.
$fqusername -imatch '^\w+[\\]\w+$'
이것은 내 환경에서는 잘 작동하지만 더 폭넓은 용도로 출시할 계획이며 다른 사람들이 올바르게 검증되는지 확인하고 싶습니다.
답변1
글쎄요. 당신은 뭔가를 놓칠 것입니다.
도메인 부분:
\w+
단어 문자와 일치합니다. 그 사람이 NETBIOS 이름을 사용하지 않고 도메인 이름(완전히 지원됨)을 사용하여 일치할 때까지 괜찮습니다 STACKOVERFLOW\Zypher
. 그러나 일치를 거부하기 STACKOVERFLOW.COM\Zypher
때문에 그렇지 않습니다..
사용자 부분:
Goyuix는 허용되지 않는 문자를 명시했습니다. 암시적으로 말하는 것은 다른 모든 문자가 허용된다는 것입니다. 이에 대한 가장 일반적인 예는 -
캐릭터입니다. 따라서 대시를 예로 사용하면 STACKOVERFLOW\Zypher-SO
일치하지 않습니다.
또한 <user>@<domain>
사용자 계정에도 유효한 표기법입니다.
무엇을 성취하려고 하시나요? 정규식보다 더 좋은 방법이 있을 수 있습니다.
답변2
아마 괜찮을 것입니다. 하지만 알아두어야 할 몇 가지 사항이 있습니다.
첫째, 따르면이것TechNet 기사에서 다음은 사용자 이름에 허용되지 않는 문자 목록입니다. PowerShell에서는 다음과 같습니다.
'( ; : " <> * + = \\ | ? , )' -imatch '\w'
false를 반환하므로 \w
괜찮을 것입니다.
\w
둘째, 가능한 개선 방법으로 일치 항목의 도메인 또는 사용자 이름 부분을 그룹화하고 쉽게 추출할 수 있도록 괄호로 묶는 것을 고려할 수 있습니다 . 참고: 일치 속도가 (아주 약간) 느려지고 더 많은 메모리가 (아주 약간) 사용됩니다.
셋째, MS KB 기사에 따르면938447특정 문자는 사용자 이름/객체에서 동일하게 취급됩니다. 빠른 테스트에서는 움라우트가 포함된 언급된 문자가 정규식과 일치하는지 PowerShell이 올바르게 일치하는지 보여줍니다. 따라서 이를 사용하여 이상한 경우에 계정이 여전히 실패할 수 있는 계정을 만드는 경우 주의하세요.