Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Perl验证Windows帐户和密码?_Perl_Powershell - Fatal编程技术网

如何用Perl验证Windows帐户和密码?

如何用Perl验证Windows帐户和密码?,perl,powershell,Perl,Powershell,我已经在Powershell 2.0中解决了这个问题,但是需要为遗留应用程序移植到Perl 5.10 我有Windows服务帐户凭据,无法作为$account和$Password交互登录到perl脚本。$Account变量包括域名和AD用户帐户名。我的Powershell解决方案(一套)是: 如果创建了新的PsSession,则帐户验证已通过,我将输出到STDOUT,如: Id Name ComputerName State ConfigurationName

我已经在Powershell 2.0中解决了这个问题,但是需要为遗留应用程序移植到Perl 5.10

我有Windows服务帐户凭据,无法作为
$account
$Password
交互登录到perl脚本。
$Account
变量包括域名和AD用户帐户名。我的Powershell解决方案(一套)是:

如果创建了新的PsSession,则帐户验证已通过,我将输出到STDOUT,如:

 Id Name            ComputerName    State    ConfigurationName     Availability
 -- ----            ------------    -----    -----------------     ------------
  1 Session1        localhost       Opened   Microsoft.PowerShell     Available
如果验证失败,我会向STDERR获得如下输出:

[localhost] Connecting to remote server failed with the following error message
 : Access is denied. For more information, see the about_Remote_Troubleshooting
 Help topic.
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:Re
   moteRunspace) [], PSRemotingTransportException
    + FullyQualifiedErrorId : PSSessionOpenFailed

我可以在我的程序中解析这些结果。我想在Windows上的Perl5.10中做类似的事情。我想做的就是测试一个帐户的密码是否有效,记住交互登录是被拒绝的。有什么想法吗?

使用来自perl的系统调用,即backticks

my $a = `powershell -command "ls;exit;"`;
if ($a =~ /pl$/) {
    print "folder contains a perl file";
} else {
    print "folder contains no perl file (strange)";
}
如果可行,那么用更复杂的文本替换简单的ls命令。
很可能你需要详细说明“和”以使其正确。

一种完全不同的方法是直接使用联系广告,但是你有很多新的挑战

很久以前,我还使用了类似下面的东西(称为win ole)。但我想我不得不放弃win200X服务器。如果有帮助的话:(请原谅编码不好)

但这实际上会检查当前用户是否是组的成员。 我想它也可以用来验证用户名pwd

require Win32::OLE;
sub GetObject {
    Win32::OLE->GetObject(@_);
}

    my ( $module, $database, $mode ) = @_;
    my $env = {%ENV}; #makes a copy, makes it possible to override $ENV for test etc
    my $oRoot = GetObject("LDAP://rootDSE");
    my $domain_name =  $oRoot && $oRoot->Get("defaultNamingContext");
    my $domain_host =  $oRoot && $oRoot->Get("dnsHostName");

    $domain_host .= "/" unless $domain_host =~ /\/$/;
    my $strAttributeName  ="sAMAccountname"; #could be userPrincipalName, cn etc
    my @user_parts = ($user_name); # the last one (i.e. -1) will be the user name
    my $alias = $user_name;

    my $group_prefix = $system_info_defs->{adAuthGroupPrefix};
    my $strADsPath        = "LDAP://$domain_host$domain_name";
    my $objConnection = Win32::OLE->new("ADODB.Connection") 
        or do{warn "Cannot create ADODB Connection!";return undef};#die ("Cannot create ADODB object!");
    my $objCommand = Win32::OLE->new("ADODB.Command") 
        or do{warn "Cannot create ADODB command!";return undef};#die ("Cannot create ADODB object!");

    $objConnection->{Provider} = ("ADsDSOObject");
    $objConnection->Open();
    $objCommand->{ActiveConnection} = ($objConnection); 

等等等等。

我确实试过了,powershell进程没有返回。我用Win32::Spawn,Win32:Process:CreateProcess,qw(),system(),``花了几天时间研究它,但在我的调用过程中没有一个是有效的,所以我想知道在Perl中是否可以不调用powershell进程而本机使用它;出口从命令行c:>perl-e“print'123”。`powershell-command ls;退出'.432''是,我以结束;出口它在cmd.exe窗口中工作,但在我的调用程序中不工作,当我在Task Manager中查看时,我看到一个powershell.exe进程。
require Win32::OLE;
sub GetObject {
    Win32::OLE->GetObject(@_);
}

    my ( $module, $database, $mode ) = @_;
    my $env = {%ENV}; #makes a copy, makes it possible to override $ENV for test etc
    my $oRoot = GetObject("LDAP://rootDSE");
    my $domain_name =  $oRoot && $oRoot->Get("defaultNamingContext");
    my $domain_host =  $oRoot && $oRoot->Get("dnsHostName");

    $domain_host .= "/" unless $domain_host =~ /\/$/;
    my $strAttributeName  ="sAMAccountname"; #could be userPrincipalName, cn etc
    my @user_parts = ($user_name); # the last one (i.e. -1) will be the user name
    my $alias = $user_name;

    my $group_prefix = $system_info_defs->{adAuthGroupPrefix};
    my $strADsPath        = "LDAP://$domain_host$domain_name";
    my $objConnection = Win32::OLE->new("ADODB.Connection") 
        or do{warn "Cannot create ADODB Connection!";return undef};#die ("Cannot create ADODB object!");
    my $objCommand = Win32::OLE->new("ADODB.Command") 
        or do{warn "Cannot create ADODB command!";return undef};#die ("Cannot create ADODB object!");

    $objConnection->{Provider} = ("ADsDSOObject");
    $objConnection->Open();
    $objCommand->{ActiveConnection} = ($objConnection);