【发布时间】:2019-08-05 17:56:01
【问题描述】:
我正在尝试自动化一个从 O365 收集数据的 powershell 脚本。我有一个特殊的受限用户设置,具有 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的根本误解。最终,我不仅希望凭据自动化,而且如果我还需要任何特殊设置,还可以从任务调度程序运行它。
【问题讨论】:
-
如果您在交互式会话中导入文件并检查保存的密码(使用 pscredential 对象上的 GetNetworkCredential 方法),密码是否相同?我不确定您是否真的可以使用 export-clixml 导出安全字符串。
-
您在尝试导入/导出文件时是否使用不同的主机或用户?密码由 DPAPI 加密,对于 用户和主机 组合是唯一的。
-
@bluuf 如果我写托管 $cred.Username 它出来是正确的。 $cred.GetNetworkCredential().Password 上的 Write-Host 虽然不返回密码。我实际上是从同一目录中完全不同的 powershell 脚本中获取一段代码!
-
@TheIncorrigible1 同一个主机,同一个用户。
-
如果是这种情况,您的问题中缺少一些内容,因为我无法重现您的问题。
标签: powershell session powershell-remoting