gpt4 book ai didi

windows - 我想在 Windows 下从 Perl 运行 .exe 命令

转载 作者:可可西里 更新时间:2023-11-01 11:08:41 25 4
gpt4 key购买 nike

我已经让 Perl 创建了一个用户名数组 (@ua);现在我需要检查是否每个都存在于 Active Directory 中。我想到的最好的方法是对每个用户运行 dsquery 并确定命令退出时是零还是非零。我写了以下内容:

foreach(@ua)
{
$out = `C:\\Windows\\System32\\dsquery.exe user -samid $_`;
}

当我运行它时,我在命令行控制台中得到了一个重复的列表:

'C:\Windows\System32\dsquery.exe' is not recognized as an internal or external command, operable program or batch file.

但是,dsquery.exe 在那个位置,我可以通过简单地运行它来证明:

C:\verify_users>C:\Windows\System32\dsquery.exe user -samid ...
"CN=...,OU=...,OU=...,OU=...,DC=...,DC=...,DC=..."

有什么想法吗?

谢谢!

最佳答案

正如 Miguel 所说,改用 Net::LDAP。

#!/usr/bin/perl
use warnings;
use strict;

use Net::LDAP;

my $tgt_user = shift or die "Usage: fetch_user_details <username>";

my $Server = 'server.foo.local';
my $User = 'user@foo.local';
my $Password = 'userpass';
my $LdapBase = 'OU=SBSUsers,OU=Users,OU=MyBusiness,DC=foo,DC=local';
# To AND conditions: "(&(cond1) (cond2))"
my $Filter = "SAMAccountName=$tgt_user";


# Bind a connection
my $ad = Net::LDAP->new("ldap://$Server")
or die("Could not connect to LDAP server: $Server");
my $res = $ad->bind( $User, password=>$Password );
if ($res->code) { die("Unable to bind as user $User: ".$res->error); }

# Run the search
# Could have attrs=>'a,b,c' for a search too
$res = $ad->search(base=>$LdapBase, filter=>$Filter);
if ($res->code) { die("Failed to search: ".$res->error); }

# Display results
my $count = $res->count;
print "Found $count matches\n";

for my $entry ($res->entries) {
$entry->dump;
# print $entry->get_value('givenname'),"\n";
}

$ad->unbind;
exit;

假设您的域名类似于带有 SBS 的 machine.foo.local,上面的内容应该差不多完成了 - 如果不是,您将需要稍微谷歌一下以了解如何设置 LdapBase。

关于windows - 我想在 Windows 下从 Perl 运行 .exe 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14504010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com