连接到office365时访问被拒绝错误

时间:2014-02-06 15:41:56

标签: php powershell office365

我正在尝试使用Powershell连接到Office365。

$username = "username@domain.com"
$password = "password"
$secure_password = $password | ConvertTo-SecureString -AsPlainText -Force
$credencial = New-Object System.Management.Automation.PSCredential ($username, $secure_password)

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri "https://ps.outlook.com/powershell/" -Credential $credencial -Authentication Basic -AllowRedirection -ErrorAction Stop -WarningAction SilentlyContinue
Import-PSSession $session -AllowClobber | Out-Null

问题是在本地PC和服务器上的Powershell控制台上它运行良好而没有任何错误,但当我尝试使用PHP运行时:

<?php
    $command = 'powershell -File "'.dirname(__DIR__).'\\ps\\test.ps1"';

    exec($command, $output);
    print_r($output);
?>

我收到错误,“访问被拒绝”:

Array
(
    [0] => New-PSSession : [pod51047psh.outlook.com] Connecting to remote server pod51047p
    [1] => sh.outlook.com failed with the following error message : Access is denied. For
    [2] => more information, see the about_Remote_Troubleshooting Help topic.
    [3] => At C:\inetpub\xxxxxx\ps\test.ps1:6 char:12
    [4] => + $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri
    [5] =>  "h ...
    [6] => + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    [7] => ~~~
    [8] =>     + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:Re
    [9] =>    moteRunspace) [New-PSSession], PSRemotingTransportException
    [10] =>     + FullyQualifiedErrorId : AccessDenied,PSSessionOpenFailed
)

有什么建议我做错了吗?还有其他方法可以用PHP运行这个Powershell脚本吗?

3 个答案:

答案 0 :(得分:0)

从错误中,PowerShell脚本已经启动,因此PHP应该没有问题来运行powershell命令。

必须为远程Shell启用用于连接到Exchange Online的用户帐户。请检查此msdn article以了解如何操作。

答案 1 :(得分:0)

我同意......该特定用户帐户没有PSRemoting的权限

答案 2 :(得分:0)

在与O365另一种脚本语言(PowerShell)类似的情况下,我遇到了这种情况。我假设您正在IIS下的应用程序池中运行PHP。如果不是,请替换您的Web服务器运行如下的用户。

如果可以从控制台运行PHP脚本,但不能通过IIS-> PHP(具有相同的凭据)运行PHP脚本,则可能是因为通过IIS运行该脚本不被视为“交互式”,并且您使用的帐户是没有明确授权。

在Windows Server 2012R2上,用于启动PSSession的默认权限配置要求具有BUILTIN \ Administrators,BUILTIN \ Remote Management Users或NT AUTHORITY \ INTERACTIVE的成员身份。

在具有本地管理员权限的PowerShell实例中运行Get-PSSessionConfiguration,以查看已被授权的用户。

要向IIS应用程序池使用的用户添加执行权限,请运行以下命令(同样从具有本地管理员特权的PowerShell实例中):Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI

当安全描述符UI弹出时,为运行IIS应用程序池的用户添加“执行”权限,然后单击“确定”。

有关详细信息,请参见以下PowerShell团队博客“您不必成为管理员即可运行远程PowerShell命令” https://blogs.msdn.microsoft.com/powershell/2009/11/22/you-dont-have-to-be-an-administrator-to-run-remote-powershell-commands/