只能使用交互式输入的凭据建立远程Powershell会话吗?

时间:2019-03-14 18:04:41

标签: powershell session powershell-remoting

我正在尝试使Powershell脚本自动化,该脚本从O365收集数据。我有一个特殊的受限用户设置,具有O365上要求的特权以及服务器上允许的本地登录,以便我可以“运行”该用户(我在以下所有脚本中都进行过此操作。以其他用户身份运行时出现的预期错误)。

当这样设置凭据并打开会话时,脚本可以很好地交互工作:

$cred  = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $cred -Authentication Basic –AllowRedirection         

但是,如果我使用以下方法创建用于自动化的凭据文件

Get-Credential | Export-Clixml -Path C:\batch\${env:USERNAME}_cred.xml

然后通过以下命令从脚本中访问

$cred = Import-Clixml -Path C:\batch\${env:USERNAME}_cred.xml
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.outlook.com/powershell -Credential $cred -Authentication Basic –AllowRedirection 

凭据文件加载似乎成功。然后,我在打开的会话上获得“访问被拒绝”,然后由于会话为空,所以当然脚本的其余部分也会失败。在所有情况下,我都会剪切和粘贴密码(而且已经尝试了很多次,包括手动键入在内的很多次),所以我认为这不是一个简单的错字问题。似乎更像是我对Powershell的根本误解。最终,如果我还有其他需要的特殊设置,我不仅要使凭据自动化,还要从任务计划程序运行它。

3 个答案:

答案 0 :(得分:1)

从PowerShell的角度来看,从您的代码中我看不到任何错误。我已经测试了在公司域中创建凭据的方式,并且能够通过导入凭据XML文件创建新的会话,该文件是通过以您的方式导出凭据而创建的。然后,我认为它可能与MS Exchange有关。

我可以建议您尝试以下替代方法:

# First we need to get the encrypted password:
$TempCred = Get-Credential
# provide credentials to the prompt

# now the encryption to be saved in a file
$TempCred.Password | ConvertFrom-SecureString | Set-Content C:\mypass.txt

这是密码的加密版本另存为文本。

您现在可以在自动化脚本中执行以下操作:

 $username = "yourusername"
 $password = Get-Content C:\mypass.txt | ConvertTo-SecureString
 $cred = New-Object System.Management.Automation.PsCredential($username, $password)
 $session = New-PSSession -Credential $cred .....

我不确定这是否适用于您的情况,它是否适用于我的公司域。它再次对我来说XML版本也有效。如果您不愿意找出XML方式为何不起作用的原因,我只是提供替代方法。

答案 1 :(得分:1)

至少可以通过调用Import-PSSession来使此功能在我的环境中起作用:

$Credential = Import-Clixml -Path D:\Modules\O365Credentials.xml
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $Credential -Authentication Basic -AllowRedirection
Import-PSSession $Session -DisableNameChecking
Get-Mailbox

答案 2 :(得分:1)

相关帐户是否已启用MFA?如果是这样,您可以尝试this

此脚本:

  • 下载Exchange Online远程PowerShell模块
  • 安装Exchange Online PowerShell模块
  • 使用MFA连接Exchange Online PowerShell

或者,您可以手动执行这些操作。此处提供了更多信息,包括详细的演练:

https://o365reports.com/2019/04/17/connect-exchange-online-using-mfa/