Regex do PowerShell para validar DOMAIN \ username

1

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

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

Isso funciona bem no meu próprio ambiente, mas estou planejando lançá-lo para uso mais amplo e quero ter certeza de que ele valide corretamente para outras pessoas.

    
por dunxd 22.12.2010 / 11:20

2 respostas

3

Bem, não é bem assim. Você vai sentir falta de algumas coisas.

Parte do domínio:

\w+ corresponde a caracteres de palavras. o que é ok, até que a pessoa não use o nome NETBIOS, mas use o nome de domínio (totalmente suportado) para que corresponda a STACKOVERFLOW\Zypher ... mas não STACKOVERFLOW.COM\Zypher porque o . irá eliminar 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 personagens são permitidos. Um exemplo muito comum disso são os caracteres - . Então, basta usar o traço como um exemplo STACKOVERFLOW\Zypher-SO não corresponderia.

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 do que o regex.

    
por 22.12.2010 / 15:59
1

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

Primeiro, de acordo com o este artigo do TechNet, segue uma lista de caracteres que são não permitido em um nome de usuário. Aqui está no PowerShell:

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

Ele retorna false, então seu \w deve estar bem.

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

Em terceiro lugar, de acordo com o artigo da MS KB 938447 alguns caracteres são tratados como iguais em nomes / objetos de usuário. Um teste rápido mostra que o PowerShell corresponde corretamente ao fato de os caracteres mencionados com um trema corresponderem ao seu regex, portanto, tenha cuidado se estiver usando-o para criar contas em que a conta ainda pode falhar em casos estranhos.

    
por 22.12.2010 / 15:17