Windows

Windows 10 - Perl 與 dsadd/dsquery

  • January 21, 2016

幾個月前,我創建了一個用於將使用者添加到 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 

有用。

這裡發生了什麼?有沒有人能看懂這個??

乾杯,盧卡斯

我猜你在 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

然後顯式使用 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`)

引用自:https://serverfault.com/questions/750801