Estou trabalhando com um script do Powershell que adiciona tarefas agendadas aos sistemas em nosso domínio. Quando executo esse script, ele solicita minha senha. Às vezes, digito a senha e o processo é iniciado, o que bloqueia minha conta. Existe uma maneira de verificar minhas credenciais para garantir que o que eu digitei será validado com o domínio?
Eu gostaria de encontrar uma maneira de consultar o controlador de domínio. Fiz algumas pesquisas no Google e devo fazer uma consulta WMI e interceptar um erro. Eu gostaria de evitar esse estilo de validação, se possível.
Alguma ideia? Desde já, obrigado.
domain
powershell
password
Doltknuckle
fonte
fonte
AccountManagement.PrincipalContext.ValidateCredentials()
não (se você fornecer uma proteção para a senha)?ActiveDirectory
módulo para fazer sua consulta LDAP?Isto é o que eu usei no passado; ele deve funcionar para contas de máquinas locais e 'diretório de aplicativos', mas até agora só o usei com sucesso com credenciais do AD:
fonte
$context
como argumento para o construtor. O PowerShell converterá automaticamente as seqüências de caracteres em uma enumeração. Melhor ainda, basta fazer[System.DirectoryServices.AccountManagement.ContextType]
o tipo de$context
. Além disso, por que você está usandobegin
eprocess
aqui? O pipeline parece uma maneira estranha de usar essa função.$context
parâmetro[System.DirectoryServices.AccountManagement.ContextType]
não é uma opção, porque a montagem que contém não é carregada até que o corpo da função seja executado; o uso do pipeline é útil se você deseja validar várias credenciais.Add-Type
chamada não ser movida para fora da função antes de sua definição ser executada. Eu hesito em ter umaAdd-Type
chamada incondicionalmente executada repetidamente dentro da função, mesmo que já esteja carregada. A validação de várias credenciais simultaneamente parece uma situação estranha em primeiro lugar. No caso raro, é isso que você deseja, você pode facilmente encerrar a ligaçãoForEach-Object
, para que não veja uma razão para complicar a função.Achei este post útil, mas ele não resolveu o meu problema, pois estava tentando executá-lo a partir de um script com a conta de administrador local conectada. Parece não funcionar como administrador local (somente quando conectado como um usuário de domínio).
No entanto, finalmente consegui obter uma solução funcional e, como havia muitos problemas, pensei em compartilhá-la aqui para que qualquer outra pessoa com esse problema tenha a resposta aqui. Ambas as respostas em uma página, dependendo de suas necessidades.
Observe que no nível superior (não incluído aqui, pois esta é apenas a seção obter credenciais), o powergui está instalado e é um requisito para este código abaixo (assim como a linha "Add-PSSnapin Quest.ActiveRoles.ADManagement"). Não sei o que o powergui faz, é diferente, mas ninguém mais poderia me dizer e funciona.
Substitua seu próprio nome de domínio nas seções "domain_name".
fonte
(ainda) Outra versão:
e
fonte