Я пытаюсь выполнить скрипт PowerShell из сценария Perl и запутать некоторые ошибки. Скрипт работает как служба Windows в окне Windows Server 2012. То, что я пытаюсь сделать, - определить, существует ли почтовый ящик Exchange для пользователя. Предыдущий код Perl был написан так, чтобы он мог подключаться к Exchange 2003, который работает в течение многих лет. Теперь мы обновляемся до Exchange 2013 и должны обновить код, чтобы он вызывал сценарий PowerShell для выполнения этой задачи. Сценарий PowerShell проверяет, имеет ли пользователь почтовый ящик и возвращает строку, если это произойдет.Выполнение сценария PowerShell из скрипта Perl
код 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
Можете ли вы поделиться более гибкими и безопасными способами? Я очень открыт для предложений, чтобы сделать это лучше. – Kenny