PowerShell Regex para validação de DOMAIN \ nome de usuário

PowerShell Regex para validação de DOMAIN \ nome de usuário

Eu tenho o seguinte regexp para validar nomes de usuários do Windows em um script do PowerShell.

$fqusername -imatch '^\w+[\\]\w+$'

Isso funciona bem em meu próprio ambiente, mas estou planejando liberá-lo para uso mais amplo e quero ter certeza de que será validado corretamente para outros.

Responder1

Bem, não exatamente. Você vai sentir falta de algumas coisas.

Parte do domínio:

\w+correspondências em caracteres de palavras. o que está ok, até que a pessoa não use o nome NETBIOS, mas use o nome de domínio (totalmente suportado) para que corresponda STACKOVERFLOW\Zypher... mas não STACKOVERFLOW.COM\Zypherporque isso .prejudicará a correspondência.

A parte do usuário:

enquanto Goyuix declarou quais personagens não são permitidos. O que isso diz implicitamente é que TODOS OS OUTROS caracteres SÃO permitidos. Um exemplo muito comum disso são os -personagens. Portanto, apenas usar o travessão como exemplo STACKOVERFLOW\Zypher-SOnão combinaria.

Também <user>@<domain>é uma notação válida para uma conta de usuário.

O que você está tentando realizar, pode haver uma maneira melhor que o regex.

Responder2

Você provavelmente ficará bem com isso, embora haja algumas coisas a serem observadas:

Primeiro, de acordo comesseArtigo do TechNet, a seguir está uma lista de caracteres que não são permitidos em um nome de usuário. Aqui está no PowerShell:

'( ; : " <> * + = \\ | ? , )' -imatch '\w'

Ele retorna falso, então você \wdeve ficar bem.

Em segundo lugar, como uma possível melhoria, você pode considerar colocar o \wparêntese entre parênteses para permitir o agrupamento e a extração fácil da parte do domínio ou do nome de usuário da correspondência. Nota: Isso irá (muito ligeiramente) desacelerar a correspondência e usar (muito ligeiramente) mais memória.

Terceiro, de acordo com o artigo MS KB938447certos caracteres são tratados como iguais em nomes de usuários/objetos. Um teste rápido mostra que o PowerShell corresponde corretamente aos caracteres mencionados com trema que correspondem ao seu regex, portanto, tome cuidado se estiver usando-o para criar contas, pois a conta ainda pode falhar em casos estranhos.

informação relacionada