Назад | Перейти на главную страницу

Windows 10 - Perl против dsadd / dsquery

Несколько месяцев назад я создал Perl-скрипт для добавления пользователей в Active Directory. В Windows 7 все работает нормально. В Windows 10 perl не может запускать «dsquery» или «dsadd», но я действительно не могу этого понять.

Когда я запускаю dsquery из той же командной строки, он работает. Пробуем с Perl-скриптом ... Не получится!

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

(= Команда dsquery не найдена ...)

Некоторые фрагменты кода из 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;}

На этом он уже останавливается. Но когда я бегу:

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

оно работает.

Что здесь происходит? Кто-нибудь может это понять ??

Привет, Лукас

Я предполагаю, что у вас 32-битная установка Perl на 64-битной ОС. Нет 32-битной версии dsquery.exe в C:\Windows\SysWOW64\ в Windows 10 AMD64. В диалоговом окне «Выполнить» сравните результаты следующего.

С 32 бит cmd:

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

Затем явно используя 64-битный cmd:

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

Или просто

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

Если вы действительно хотите запустить 64-битную версию dsquery.exe из 32-битной среды попробуйте использовать sysnative псевдоним.

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

Попробуйте это в своем сценарии, нет никаких гарантий, что Perl просто не подавится этим.

if (`C:\\Windows\\sysnative\\dsquery.exe user -samid $uname`)