Windows 10 - Perl vs. dsadd / dsquery

3

Eu criei um script perl para adicionar usuários ao Active Directory há alguns meses. No Windows 7, ele funciona bem. No Windows 10 perl não é capaz de executar "dsquery" ou "dsadd", mas eu realmente não consigo entender isso.

Quando executo "dsquery" na mesma linha de comando, funciona. Tentando com o script perl ... Não vai!

Der Befehl "C:\Windows\System32\dsquery.exe" ist entweder falsch geschrieben oder konnte nicht gefunden werden.

(= O comando dsquery não foi encontrado ...)

Alguns trechos de código do script perl:

$datetime = strftime("%d.%m.%Y %H:%M:%S", localtime);
&GetOptions     ("-v=s"    => \$fname,
             "-n=s"    => \$sname,
             "-u=s"    => \$uname,
             "-p=s"    => \$pwd,
             "-noshare" =>\$noshare,
             "-test"   =>\$test,
             "-noquota"   =>\$noquota,
             "-sshpw=s"   =>\$sshpw );

unless ($fname) {                
print "Vorname: ";
$fname = <STDIN>;
chomp $fname;}

unless ($sname) {
print "Nachname: ";
$sname = <STDIN>;
chomp $sname;}

unless ($uname) {
$uname =  substr($fname, 0, 1);
$uname = "$uname.$sname";}
$uname = lc($uname);

if ('C:\Windows\System32\dsquery.exe user -samid $uname'){
print "Benutzer $uname existiert bereits!";
exit;}

Neste ponto, ele já para. Mas quando eu corro:

c:\windows\system32\dsquery.exe user -samid ANYUSER 

funciona.

O que está acontecendo aqui? Alguém pode entender isso?

Felicidades, Lukas

    
por user333163 21.01.2016 / 16:13

1 resposta

5

Eu estou supondo que você tenha uma instalação de 32 bits do Perl em um sistema operacional de 64 bits. Não há uma versão de 32 bits de dsquery.exe in C:\Windows\SysWOW64\ no Windows 10 AMD64. Na caixa de diálogo "Executar", compare os resultados do seguinte.

Com 32 bits cmd :

C:\Windows\SysWOW64\cmd.exe /K C:\windows\system32\dsquery.exe

Então, explicitamente, usando 64 bits cmd :

C:\Windows\System32\cmd.exe /K C:\windows\system32\dsquery.exe

Ou apenas

DIR C:\Windows\SysWOW64\dsq*.*
DIR C:\Windows\System32\dsq*.*

Se você realmente deseja executar 64 bit dsquery.exe em um ambiente de 32 bits, tente usar o sysnative alias.

C:\Windows\SysWOW64\cmd.exe /K C:\windows\sysnative\dsquery.exe

Tente isso no seu roteiro, sem garantias de que Perl não vai engasgar com isso.

if ('C:\Windows\sysnative\dsquery.exe user -samid $uname')
    
por 21.01.2016 / 16:29