我想要自动化 802.1X 环境中所需的配置设置。为此,我需要传递用户凭据。
因此,我想构建一个需要用户凭据的小型 GUI。单击登录按钮等按钮后,PowerShell 脚本将导入包含网络接口配置数据的 xml 文件。
此 XML 将通过以下方式导入:
netsh lan add profile filename="PATH_AND_FILENAME.xml" interface="INTERFACE_NAME"
完成后,我想将用户凭据(在 GUI 中提供)传递给操作系统,而不使用内置对话框。
我发现存储凭据的注册表项类似于User HKCU\Software\Microsoft\Wlansvc\UserData\Profiles[GUID]
和Machine HKLM\Software\Microsoft\Wlansvc\UserData\Profiles[GUID]
,但它们用于无线连接。
我必须将凭据保存在哪里才能缓存它们?Windows GUI 中有一个等效功能,如屏幕截图所示
802.1X 设置:
要保存的凭证:
答案1
试图窃取用户信用并不明智。它们不是纯文本形式,并且无法逆转地传递给任何其他操作。
您说您正在呈现一个 GUI 来向用户询问凭据。在任何交互式会话期间,如果您询问凭据,则需要以安全的方式询问。
完成此操作后,您可以直接通过代码获取用户名和密码。但是,您现在处理的是非常敏感的用户信息。您确实需要咨询您的安全/风险管理/政策团队是否同意这样做。这是因为您实际上是在捕获用户凭证,您可以在用户可以访问的任何地方使用这些凭证,而且没有什么可以阻止您以后带着它们逃跑。
因此,您可以简单地使用 Get-Credential 或创建一个新的 PSCredential 对象,或者使用 SecureString 来请求用户凭证,然后在需要它们时,只需反转它即可。
($Creds = Get-credential -Credential "$env:USERDOMAIN\$env:USERDOMAIN")
$Creds.GetNetworkCredential().UserName
$Creds.GetNetworkCredential().Password
# Results
UserName Password
-------- --------
contoso\testuser System.Security.SecureString
testuser
password
($Username = Read-Host -Prompt 'Enter username')
($Password = Read-Host -Prompt 'Enter password' -AsSecureString)
($Creds = New-Object System.Management.Automation.PSCredential ($Username, $Password))
$Creds.GetNetworkCredential().UserName
$Creds.GetNetworkCredential().Password
# Results
Enter username: contoso\testuser
contoso\testuser
System.Security.SecureString
UserName Password
-------- --------
contoso\testuser System.Security.SecureString
testuser
password
($Creds = New-Object PSCredential $Username, $Password)
$Creds.GetNetworkCredential().UserName
$Creds.GetNetworkCredential().Password
# Results
$Creds
UserName Password
-------- --------
contoso\testuser System.Security.SecureString
UserName Password
-------- --------
contoso\testuser System.Security.SecureString
testuser
password
OP 更新
至于……
将它们保存在哪里。我想知道应该将它们保存在哪里以缓存用户凭据
这些是您可以利用的方法。当然,这必须在需要它的任何其他用例之前完成。
#saving credentials
Get-Credential | Export-CliXml -Path c:\credential.xml
#importing credentials to a variable
$Credential = Import-CliXml -Path c:\credential.xml
关于此主题的 YouTube 视频: 了解如何使用 PowerShell 安全地使用密码
您还可以使用 Windows 凭据存储并从那里调用它。上面的视频中也有显示。
https://gallery.technet.microsoft.com/scriptcenter/PowerShell-Credentials-d44c3cde
https://www.powershellgallery.com/packages/CredentialManager/1.0