Get-Credential 本质是创建内存中安全封装的 PSCredential 对象,密码自动转为 SecureString;支持交互式输入、自定义提示、非交互式构建及 Export/Import-Clixml 加密持久化(仅限当前用户和电脑)。
在 powershell 中用 get-credential 获取凭据,本质是创建一个安全的 pscredential 对象,它把密码自动转为 securestring,不会明文暴露。这不是“加密存储”,而是“内存中安全封装”——真正加密保存需额外步骤。
直接获取凭据对象(交互式)
这是最常用方式,适合手动运行脚本或调试:
- 执行
$cred = Get-Credential,会弹出图形窗口(Windows PowerShell)或控制台提示(PowerShell 6+),输入用户名和密码 - 输入后生成的对象包含
$cred.UserName(明文)和$cred.Password(已为SecureString,不可直接读取) - 可立即用于支持
-Credential参数的命令,比如:Restart-Computer -ComputerName srv01 -Credential $cred -Force
自定义提示信息(提升可读性)
避免用户困惑“到底要输谁的凭据”:
- 加
-Message显示说明文字:Get-Credential -Message "请输入域管理员凭据以部署更新" - 预填用户名(不填密码):
Get-Credential -UserName "CONTOSO\Administrator" - 同时指定标题和消息(更清晰):
Get-Credential -Title "AD 批量操作" -Message "请提供具有OU写入权限的账户"
非交互式生成凭据(适用于自动化)
脚本不能弹窗时,需绕过交互,但必须避免硬编码明文密码:
- 先用
Read-Host -AsSecureString手动输入一次密码并转为安全字符串:$pw = Read-Host "输入密码" -AsSecureString - 再组合用户名与密码创建对象:
$cred = [PSCredential]::new("CONTOSO\svc-acct", $pw) - 注意:
ConvertTo-SecureString "plainpass" -AsPlainText -Force虽可行,但有日志泄露风险,仅限测试环境
安全保存凭据到本地文件(加密持久化)
让脚本下次运行不再手动输密码,但只限当前用户+当前电脑可用:
- 首次运行并保存:
$cred | Export-Clixml "$env:USERPROFILE\creds.xml" - 后续加载使用:
$cred = Import-Clixml "$env:USERPROFILE\creds.xml" - 关键限制:该文件在其他电脑或另一 Windows 用户下无法解密,也不兼容 Linux/macOS(那里是明文存储)

















