几个月前,我创建了一个用于将用户添加到 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.
(= 无法找到命令 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
有用。
这里发生了什么?有人能理解吗?
欢呼吧,卢卡斯
答案1
dsquery.exe
我猜您在 64 位操作系统上安装了 32 位 Perl。Windows 10 AMD64上没有 32 位版本C:\Windows\SysWOW64\
。从“运行”对话框中比较以下结果。
对于 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*.*
如果你确实想dsquery.exe
在 32 位环境中运行 64 位,请尝试使用sysnative
别名。
C:\Windows\SysWOW64\cmd.exe /K C:\windows\sysnative\dsquery.exe
在您的脚本中尝试这个,不能保证 Perl 不会因此而失败。
if (`C:\\Windows\\sysnative\\dsquery.exe user -samid $uname`)