使用 PowerShell 和 cmdkey 添加 Windows 个凭据

Add Windows Credentials using PowerShell & cmdkey

我正在尝试使用来自某些 UI 的凭据提示使用 cmdkey:

添加 Windows 凭据
$sessionCredential = $host.ui.PromptForCredential("Need credentials", "Please enter your user name and password.", "", "Server Crdentials")
$ps = ConvertFrom-SecureString -SecureString $sessionCredential.password
cmdkey.exe /add:server1 /user:$($sessionCredential.UserName) /pass:$($ps)

凭据已正确添加,但密码未正确添加。

我能做什么?

直接使用 CredentialManager PowerShell module. It saves the password in the same place as cmdkey, but it can take PSCredential 对象,无需转换为文本。

Import-Module CredentialManager

# Get the credential from the user with a windows credentials prompt:
$SessionCredential = Get-Credential -Message 'Please enter your server credentials'

# Save the credential object directly without unwrapping it:
New-StoredCredential -Credentials $SessionCredential -Target ServerCredentials -Persist Enterprise `
  -Comment "Server Credentials for $($SessionCredential.UserName)" > $null

# Open the credential later
$SavedCred = Get-StoredCredential -Target ServerCredentials

# Delete if needed
Remove-StoredCredential -Target ServerCredentials

cmdkey /pass:$($ps)由于PowerShell乱码密码字符容易出错

显然,问题是 ConvertFrom-SecureString 正在返回一个 加密的标准字符串 ConvertFrom-SecureString.

获取纯文本的选项在 PowerShell 5.1 上不可用。

我找到了正确的转换

我知道它不安全。它在安全客户端中使用。

查看下面的固定代码:

$sessionCredential = $host.ui.PromptForCredential("Need credentials", "Please enter your user name and password.", "", "Server Crdentials")
$mpass = [System.Net.NetworkCredential]::new("",$sessionCredential.password).Password
cmdkey.exe /add:server1 /user:$($sessionCredential.UserName) /pass:$($mpass)

非常有效。唯一需要注意的是在使用之前需要 copy/distribute CredentialManager 模块。