从用户在 PowerShell 中选择的证书获取基本信息
Get basic information from user selected certificate in PowerShell
我正在为我们的帮助台开发一个带有数据库后端的小型工单应用程序。其中一部分是跟踪有关我组织笔记本电脑的一些基本信息(制造商、型号、序列号、分配给谁等)。我会使用真正的编程语言,如 C# 或 Java,但出于我头脑中的人的原因,我坚持使用 Windows 10 Enterprise 中内置的可用语言,因此 PowerShell 和 WPF。
我们的网络有一个 Windows 域,其中包含大型 Active Directory 林和智能卡身份验证。如果可能的话,我想做的是让用户 select 他们的智能卡证书(使用这个应用程序的用户将不同于登录 Windows 的用户,即会有多个智能卡插入)与 UAC 提示或 Get-Credential 提示。输入他们的密码不是必需的,但确认他们的身份会很好。我只想从 certificate/card 他们 select 检索一些基本信息,例如显示名称和电子邮件地址。我将使用电子邮件地址查询我的数据库以获取其他信息,例如分配给他们的笔记本电脑。如果可能,我想避免进行 Active Directory 查找,但该选项并未完全关闭 table.
下面是我发现的一些东西,但它们都是我正在尝试做的事情的部分解决方案,我不确定如何将它们组合在一起。 Get-Credential 提示用户选择一张智能卡并输入他们的密码,这会做我前面正在寻找的事情,但在后面它 returns 是一个包含用户名的 PSCredential 对象(以某种方式编码,但我无法找到使用的编码,或者可能是 UID)和 SecureString 密码(未验证,用户可以将此留空或输入任何内容)。我不知道该怎么做才能获得我想要的信息。 Get-ADUser 似乎无法 return 使用 PSCredential 对象作为身份的用户对象。我对此有什么遗漏或不了解吗?我正在尝试做的事情可行吗?
https://www.akaplan.com/blog/2013/10/get-users-mailaddress-from-smartcard-with-powershell/
https://blogs.msdn.microsoft.com/alejacma/2010/12/15/how-to-enumerate-all-certificates-on-a-smart-card-powershell/
最后一个 link 似乎可行,但我不确定如何使用它。文档非常稀疏。
如果我想使用基于当时插入的智能卡的证书,我会使用 certutil.exe 来提取所有智能卡信息。然后从结果文本中获取证书序列号,并查询与序列号匹配的 CurrentUser\MY 证书库。获得证书后,我会使用 -OutputMode Single
参数将该信息传递给 Out-GridView
,以允许用户 select 证书。从那里您可以根据显示的证书获得用户信息。
$SCSerials = certutil -scinfo -silent | Where{$_ -match 'Serial Number: (\S+)'} | ForEach {$Matches[1]}
$SelectedThumb = Get-ChildItem Cert:\CurrentUser\my | Where{$_.SerialNumber -in $SCSerials} | Select Subject,Issuer,NotBefore,NotAfter,Thumbprint | Out-GridView -Title 'Select a smartcard certificate.' -OutputMode Single |% Thumbprint
$UserCert = Get-Item Cert:\CurrentUser\My$SelectedThumb
然后$UserCert.Subject
是用户的识别名,你可以用它来查询AD或任何你想要的。
我正在为我们的帮助台开发一个带有数据库后端的小型工单应用程序。其中一部分是跟踪有关我组织笔记本电脑的一些基本信息(制造商、型号、序列号、分配给谁等)。我会使用真正的编程语言,如 C# 或 Java,但出于我头脑中的人的原因,我坚持使用 Windows 10 Enterprise 中内置的可用语言,因此 PowerShell 和 WPF。
我们的网络有一个 Windows 域,其中包含大型 Active Directory 林和智能卡身份验证。如果可能的话,我想做的是让用户 select 他们的智能卡证书(使用这个应用程序的用户将不同于登录 Windows 的用户,即会有多个智能卡插入)与 UAC 提示或 Get-Credential 提示。输入他们的密码不是必需的,但确认他们的身份会很好。我只想从 certificate/card 他们 select 检索一些基本信息,例如显示名称和电子邮件地址。我将使用电子邮件地址查询我的数据库以获取其他信息,例如分配给他们的笔记本电脑。如果可能,我想避免进行 Active Directory 查找,但该选项并未完全关闭 table.
下面是我发现的一些东西,但它们都是我正在尝试做的事情的部分解决方案,我不确定如何将它们组合在一起。 Get-Credential 提示用户选择一张智能卡并输入他们的密码,这会做我前面正在寻找的事情,但在后面它 returns 是一个包含用户名的 PSCredential 对象(以某种方式编码,但我无法找到使用的编码,或者可能是 UID)和 SecureString 密码(未验证,用户可以将此留空或输入任何内容)。我不知道该怎么做才能获得我想要的信息。 Get-ADUser 似乎无法 return 使用 PSCredential 对象作为身份的用户对象。我对此有什么遗漏或不了解吗?我正在尝试做的事情可行吗?
https://www.akaplan.com/blog/2013/10/get-users-mailaddress-from-smartcard-with-powershell/
https://blogs.msdn.microsoft.com/alejacma/2010/12/15/how-to-enumerate-all-certificates-on-a-smart-card-powershell/ 最后一个 link 似乎可行,但我不确定如何使用它。文档非常稀疏。
如果我想使用基于当时插入的智能卡的证书,我会使用 certutil.exe 来提取所有智能卡信息。然后从结果文本中获取证书序列号,并查询与序列号匹配的 CurrentUser\MY 证书库。获得证书后,我会使用 -OutputMode Single
参数将该信息传递给 Out-GridView
,以允许用户 select 证书。从那里您可以根据显示的证书获得用户信息。
$SCSerials = certutil -scinfo -silent | Where{$_ -match 'Serial Number: (\S+)'} | ForEach {$Matches[1]}
$SelectedThumb = Get-ChildItem Cert:\CurrentUser\my | Where{$_.SerialNumber -in $SCSerials} | Select Subject,Issuer,NotBefore,NotAfter,Thumbprint | Out-GridView -Title 'Select a smartcard certificate.' -OutputMode Single |% Thumbprint
$UserCert = Get-Item Cert:\CurrentUser\My$SelectedThumb
然后$UserCert.Subject
是用户的识别名,你可以用它来查询AD或任何你想要的。