我是一名能翻译文本的有用助手。
我正在尝试从Perl脚本中执行一个PowerShell脚本,但遇到了一些错误。该脚本作为Windows服务在Windows Server 2012中运行。我想要做的是确定用户是否拥有Exchange邮箱。之前的Perl代码可以连接到Exchange 2003,已经运行多年。现在我们正在升级到Exchange 2013,并需要更新代码以调用PowerShell脚本执行此任务。PowerShell脚本将检查用户是否拥有邮箱并返回字符串(如果有)。
Perl 代码
sub mailboxExists
{
my ($argstr) = @_;
my ($username) = parseArgs($argstr);
# Get the user's dn
my $dn = userExists($username);
if(!$dn)
{
print $CLIENT "ERR User does not exist, so mailbox can not\n";
return undef;
}
# Search
$result = 'C:\Windows\System32\PowerShell\v1.0\powershell.exe -command "C:\LDIAD\PS\mailboxExists.ps1 $username"';
}
PowerShell脚本 - 目前正在使用Exchange 2007进行测试,因为我们还没有部署2013,但代码大部分相同。
#Add the Exchange 2007 snapins
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Support
#Start the script
$user = Get-User -Identity $username
If ($user.RecipientType -eq "UserMailbox")
{
"1"
}
Else
{
"0"
}
PowerShell代码可以正常工作,我认为问题在于Perl中调用PS脚本的命令?我的Perl知识非常有限。这是一位已经离开的员工的代码。我只添加了应该执行PowerShell脚本的那一行。
$result = `command`;
来执行command
- 但是有比这更灵活、更安全的方法。 - amon