【问题标题】:Invoke REST API method to update the local admin password调用 REST API 方法来更新本地管理员密码
【发布时间】:2018-06-01 20:29:52
【问题描述】:

我必须使用 PowerShell 为 Active Directory 编写迁移脚本。 此脚本将更新存储在 KeePass 的 Pleasant Password Server 中的服务器本地管理员的密码。

首先我使用我的 Windows 登录凭据登录 KeePass,然后搜索需要更新密码的服务器。

因此,跳过上述功能的脚本,我将从生成密码开始:

function Generate-Password {
    $alphabets = "abcdefghijklmnopqstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#%^*"

    $char = for ($i = 0; $i -lt $alphabets.Length; $i++) { $alphabets[$i] }

    for ($i = 1; $i -le 16; $i++) {
        Write-Host -NoNewline $(Get-Random $char)
        if ($i -eq 16) { Write-Host `n }
    }
}
$pass = Generate-Password 

从上述脚本生成密码后,我想更新我搜索的服务器的密码。

例如:查找Server Details的附件

我想通过Generate-Password函数修改上面搜索到的服务器的密码。

为此,我使用了REST API method of PPS

function UpdatePassword {
    $update = Invoke-RestMethod -Uri “$KeepassURL/api/v4/rest/credential/$CredentialID/password/$pass” -Headers $headers -Method Put -ContentType ‘application/json’
}

我认为我在这里的语法有一些错误。我如何传递生成的密码,即。 $pass 调用的 REST 方法?

【问题讨论】:

  • 什么“服务器详细信息”?什么没有按您预期的方式工作? 如何它没有按您预期的方式工作?
  • 服务器详细信息是指用户名=服务器名称(01)和与之相邻的密码。请找到所附图片!
  • 嗯...不,我没有。
  • 嗨@AnsgarWiechers。请原谅我找不到附加的图像。已编辑问题。现在您可以看到链接“服务器详细信息”作为附加图像。谢谢!

标签: windows rest powershell scripting active-directory


【解决方案1】:

您引用的文档说:

PUT credential/:id ** 更新凭据 ** 方法 PUT 需要身份验证?是的
参数 凭据的 ID GUID
输入类型凭据 结果类型 无

Credential 输入类型的文档显示了这个示例 JSON 文档:

示例凭据 (JSON)
{ 编号:“2b45438a-2f4a-4d96-9ba9-058ea54252fb” 名称:“凭据 0” 用户名:“凭据 0” 密码:空 网址:“” 备注:“” GroupId:“cfb2c08e-e990-43b7-99d1-c8e23e0ae00e” 创建:“2013-11-18T10:14:27.8218898-07:00” 修改:“2015-06-01T13:26:12.336084-06:00” 过期:空 ... }

所以你可能需要做这样的事情:

$CredentialID = '2b45438a-2f4a-4d96-9ba9-058ea54252fb'
$uri  = "$KeepassURL/api/v4/rest/credential/$CredentialID"
$type = 'application/json'
$body = @{
    'Id'       = $CredentialID
    'Name'     = 'Credential 0'
    'Username' = 'Credential 0'
    'Password' = $pass
    ...
}

Invoke-RestMethod -Uri $uri -Method Put -Headers $headers -Body $body -ContentType $type

假设您通过$headers 传递一个已经获得的授权令牌。

不过,未经测试,我不太确定您是需要正文中的所有键/值对还是只需要相关的键/值对,因此您需要稍微尝试一下。

【讨论】:

  • 感谢您的回答。变量“$CredentialID”需要 GUID 才能进一步执行脚本。但是客户端 ( KeePass ) 只显示机器的“UUID”而不是 GUID。我是否需要另一个脚本来首先访问服务器的 GUID?
  • @PranjalKaushik 你不接受这个答案有什么特别的原因吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-26
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多