我使用Perl脚本连接到多个服务器。为了测试脚本,我尝试仅使用连接过程执行.pl文件:
#!/usr/bin/perl
use strict;
use Win32::NetResource;
my $acs = 'zeus';
my $sharename="P:";
my $RemoteShare = {
'LocalName' => "$sharename",
'RemoteName' => "\\\\$acs\\c\$\\scratch",
};
my $user = "Administrator";
my $pw = "1234";
my $share = "\\\\$acs\\c\$\\scratch";
print $share;
my $Connection = 0;
Win32::NetResource::AddConnection($RemoteShare,$pw,$user,$Connection);
opendir(in, $share) or print "No Connection!";
它工作得非常好。网络驱动器已映射,我可以看到所有文件。但是,只要我在主程序的sub中使用完全相同的代码,它就不再起作用了。 $ share变量仍然包含正确的路径,但网络驱动器不再被映射。
这里有一些来自我的主脚本的代码片段,它与HTML一起使用:
use strict;
use Win32::NetResource;
my $sharename="P:";
my $share = "\\\\$acs\\c\$\\scratch";
my $anzahl = $q->param('anzahl');
my $acs = $q->param('acs');
unless (defined($acs)){
&showCGI();
exit 0;
} else {
&showCGI();
&connect($acs);
&getComFile();
exit 0;
}
sub showCGI(){
print $q->header;
print "<link href=\"path/css/Scripts.css\" rel=\"stylesheet\">\n";
print $q->start_html(
-title => "Text",);
print $q->h3("Text");
print '<hr>';
print $q->start_multipart_form(
-name=> 'par');
print "<table>\n";
print "<tbody>\n";
print "<tr>\n";
print '<th align="left">Server:</th>';
print '<th align="left">Text to show from file:</th>';
print '<th></th>';
print '</tr>';
print '<tr>';
print '<td>';
print $q->textfield(-name=>'acs',
-size=>20,
-id=>'acs');
print '</td>';
print '<td>';
print $q->textfield(-name=>'anzahl',
-size=>20,
-value=>10,
-id=>'anzahl');
print '</td>';
print '<td>';
print $q->submit(-value => 'Send Data');
print '</td></tr></tbody></table>';
print $q->hr;
print $q->end_form;
}
sub connect(){
my $RemoteShare = {
'LocalName' => "$sharename",
'RemoteName' => "\\\\$acs\\c\$\\scratch",
};
my $user = "Administrator";
my $pw = "1234";
my $Connection = 0;
Win32::NetResource::AddConnection($RemoteShare,$pw,$user,$Connection);
}
sub getComFile(){
print $share;
opendir(in, $share) or print "<br>No Connection!<br><hr>";
#afterwards the file gets further processed
使用这种方法,我会收到一个&#34;无连接&#34;消息和程序停止。这可能是什么问题?
修改
根据choroba的建议,我尝试使用管理员帐户在服务器上执行脚本。我可以映射驱动器,但它会立即再次断开连接。现在我有一个&#34;断开的网络驱动器&#34;在我的探险家,我无法访问。它说&#34;位置不可用。用户名或密码不正确&#34;。