首页 > 解决方案 > 使用 $host.ui.PromptForCredential 时输入值存储在哪里?

问题描述

在以下代码中,系统将 $Credential 的值存储在哪里?

$Credential= $host.ui.PromptForCredential("","Please Enter Your domain username, eg. user1@contoso.com","","")

代码执行后值会发生什么变化?

请原谅非常基本的问题......只是想确定我正在制作的脚本的任何安全隐患。我还希望能找到专门解决此问题的 MSDN/TechNet 文章。

非常感谢你。

标签: powershellsecurity

解决方案


首先,你应该Get-Credential改用 - 它更容易并且做同样的工作:

$credential = Get-Credential -Message "Please Enter Your domain username, eg. user1@contoso.com"

这两种方法都创建了一个PsCredential对象,对该对象的引用存储在$credential. 密码以 . 形式存储在内存中SecureString,以帮助确保其安全,并且不会写入磁盘、注册表等,除非您特意这样做:

PS C:\> $credential

UserName                        Password
--------                        --------
domain\user System.Security.SecureString

因此,不随意尝试阅读是安全的。但是,它并不完全安全:

PS C:\> $credential.GetNetworkCredential() | Format-List *   

UserName       : user
Password       : Password123
SecurePassword : System.Security.SecureString
Domain         : domain

推荐阅读