Windows 10 - Perl 与 dsadd/dsquery

use*_*163 3 windows active-directory perl windows-10

几个月前,我创建了一个用于将用户添加到 Active Directory 的 perl 脚本。在 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.
Run Code Online (Sandbox Code Playgroud)

(= 无法找到命令 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;}
Run Code Online (Sandbox Code Playgroud)

此时它已经停止。但是,当我运行时:

c:\windows\system32\dsquery.exe user -samid ANYUSER 
Run Code Online (Sandbox Code Playgroud)

有用。

这里发生了什么?任何人都可以理解这一点吗??

干杯,卢卡斯

jsc*_*ott 5

我猜你在 64 位操作系统上安装了 32 位 Perl。Windows 10 AMD64 上没有 32 位版本的dsquery.exein C:\Windows\SysWOW64\。从“运行”对话框比较以下结果。

使用 32 位cmd

C:\Windows\SysWOW64\cmd.exe /K C:\windows\system32\dsquery.exe
Run Code Online (Sandbox Code Playgroud)

然后明确使用 64 位cmd

C:\Windows\System32\cmd.exe /K C:\windows\system32\dsquery.exe
Run Code Online (Sandbox Code Playgroud)

要不就

DIR C:\Windows\SysWOW64\dsq*.*
DIR C:\Windows\System32\dsq*.*
Run Code Online (Sandbox Code Playgroud)

如果您真的想dsquery.exe从 32 位环境运行 64 位,请尝试使用sysnative别名。

C:\Windows\SysWOW64\cmd.exe /K C:\windows\sysnative\dsquery.exe
Run Code Online (Sandbox Code Playgroud)

在你的脚本中试试这个,不能保证 Perl 不会被它卡住。

if (`C:\\Windows\\sysnative\\dsquery.exe user -samid $uname`)
Run Code Online (Sandbox Code Playgroud)