我正在尝试使用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脚本吗?
答案 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/