无法使用 Keyvault Secrets 加入域

Unable to use Keyvault Secrets to do Domain Join

我正在尝试使用隐藏用户名和密码的脚本化过程加入域。

我认为在 Azure 中使用 Keyvault 是最好的方法,但是当我使用下面的脚本时,它给了我一些错误。这可能吗,还是我做错了。

这些是 Azure VM

$AdminUser = 'https://<Keyvault>.vault.azure.net:443/secrets/AdminUser/de7d74df74ff4099b0bd7422c171a4fe'
$AdminPassName = 'https://<Keyvault>.vault.azure.net:443/secrets/SQLPassword/f394ded0cc16482096bc181f5ab650bd'

$mycred = New-Object System.Management.Automation.PSCredential ("$($AdminUser.SecretValueText)", $AdminPass.SecretValue)

$domain = 'hmr.loc'

Add-Computer -DomainName $domain -Credential $mycred

我得到的错误是

New-Object : Exception calling ".ctor" with "2" argument(s): "Cannot process argument because the value of argument "userName" is not valid. Change the value of the 
"userName" argument and run the operation again."
At line:1 char:11
+ $mycred = New-Object System.Management.Automation.PSCredential ("$($A ...
+           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodInvocationException
    + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand

我认为它与这条线有关...

$mycred = New-Object System.Management.Automation.PSCredential ("$($AdminUser.SecretValueText)", $AdminPass.SecretValue)

提前致谢..

你的方法没有意义(想法有)。您需要对秘密 URI 执行其余调用,而不仅仅是声明 uri 并将其用作变量。所以你通常有两种方法:

  1. 自己执行 rest call(在这种情况下,您必须自己处理 auth)
  2. 使用 powershell cmdlet 检索 Key Vault Secret,但您需要先向 Azure 进行身份验证,并具有足够的权限来执行此调用

无论哪种方式,您都必须传递一些您将用于身份验证的数据,因此您可能需要退后一步,使用您的更高级别 scripts\entities 为您处理并安全地传递 user\password 到您的脚本。