更改密码后如何在Powershell脚本中刷新凭证

时间:2019-07-04 10:21:26

标签: powershell

我有一个运行很长时间的powershell脚本。它通过GPO在登录时启动,使用用户当前的凭据连接到Exchange,然后返回睡眠状态。它每半小时左右执行一次此操作,并持续到用户注销为止。

如果用户在此期间更改密码,则会出现此问题。脚本下一次尝试连接到Exchange时失败。我认为这是因为Powershell会话中存储的凭据不再有效。

是否可以从操作系统中刷新/更新脚本的凭据?

我想解决的另一种方法是在新的Powershell实例中重新启动脚本,从而获取一组新的凭据。这听起来有问题,因为我认为如果上下文是从正在运行的脚本中启动的,则上下文将传递给新会话。触发调用脚本的计划任务可能会奏效,尽管我没有尝试过,但似乎太费事了。

有什么想法吗?我不想使用Get-Credential,因为这需要提示。我也不想在文件中存储密码。

[System.Security.Principal.WindowsIdentity]可能提供一种方法?不太确定从哪里开始。

更新: 我正在按照https://devblogs.microsoft.com/scripting/learn-to-use-the-exchange-web-services-with-powershell/

使用EWS

您可以按照以下方式使用存储在当前Powershell会话中的凭据: $ exchService.UseDefaultCredentials = $ true

1 个答案:

答案 0 :(得分:0)

所以我没有弄清楚如何在正在运行的Powershell会话中更新存储的凭据...肯定有可能...无论如何,这就是我所做的。

  1. 脚本运行,成功连接到Exchange,进入睡眠状态
  2. 用户更改Windows密码
  3. 脚本唤醒,与Exchange的连接失败
  4. 通过try / catch捕获错误,使用Schedule.Service COMObject创建计划任务以从现在起5秒内运行
  5. 退出脚本
  6. 任务使用更新的凭据触发并重新启动Powershell脚本。与Exchange的连接成功。脚本休眠
  7. 任务通过Settings.deleteExpiredTaskAfter ='PT0S'自动删除自身-立即删除。您还需要在触发器上设置.EndBoundary

工作相当整洁,但这有点hack。很高兴看到别人提供的更优雅的解决方案。