【问题标题】:How to refresh credentials in powershell script after password change更改密码后如何在powershell脚本中刷新凭据
【发布时间】:2019-11-15 01:41:25
【问题描述】:

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

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

有没有办法从操作系统刷新/更新脚本的凭据?

我认为解决此问题的唯一其他方法是在新的 powershell 实例中重新启动脚本,从而获取一组新的凭据。这听起来有问题,因为我相信如果从正在运行的脚本启动上下文将被传递到新会话。虽然我没有尝试过,但触发调用脚本的计划任务可能会起作用,而且看起来过于复杂。

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

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

更新: 我按照以下方式使用 EWS:https://devblogs.microsoft.com/scripting/learn-to-use-the-exchange-web-services-with-powershell/

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

【问题讨论】:

  • 你是如何获得他们的用户名和密码的?
  • 你不能把这个作为计划任务来做吗?
  • AFAIK,没有办法获取用户会话的凭据。我很好奇你是怎么做到的。我同意凭据保存在机器上,但它们对用户来说是模糊的。我相信,任务计划程序也需要刷新会话。
  • 您可以很容易地将密码存储在文件或内置凭据管理器中:What is the best way to store account credentials...。通过一些设置,您可以让您的脚本作为计划任务在其他人无法登录的低权限帐户下运行,但该帐户可以访问凭据(安全地绑定到 that i> 那台机器上的帐户)..
  • @TheFish 我可能会尝试预定的任务路线,尽管我希望在 Powershell 中完成所有操作。

标签: powershell


【解决方案1】:

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

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

工作得相当整齐,但它有点小技巧。喜欢看到有人提出更优雅的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 2019-06-01
    • 2021-06-27
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多