【发布时间】:2014-01-06 20:16:44
【问题描述】:
我正在尝试从 Perl 脚本执行 PowerShell 脚本并遇到一些错误。该脚本在 Windows Server 2012 机器上作为 Windows 服务运行。我要做的是确定用户是否存在 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——但还有比这更灵活、更安全的方法。 -
可以分享更灵活更安全的方法吗?我非常愿意接受建议以使这变得更好。
标签: perl powershell