从PowerShell中的用户选择证书中获取基本信息



我正在使用带有数据库后端的小型工作订单应用程序进行服务台。其中一部分是在跟踪有关我组织的笔记本电脑(制造商,型号,序列号,被分配给的人等)的一些基本信息。我会使用一种真正的编程语言,例如C#或Java,但是出于我脑海中的原因,我坚持使用Windows 10 Enterprise内置的内容,因此使用WPF的PowerShell。

我们的网络具有一个带有大型Active Directory Forest和智能卡身份验证的Windows域。如果可能的话,我想做的是让用户选择其智能卡证书(使用此应用程序的用户将与登录窗口的用户不同,即插入多个智能卡)使用UAC提示符或获取 - 限制提示。进入他们的别针不是必需的,尽管确认其身份是很不错的。我想要的是从他们选择的证书/卡中检索一些基本信息,例如显示名称和电子邮件地址。我将使用电子邮件地址查询我的数据库中的其他信息,例如分配了哪些笔记本电脑。如果可能的话,我想避免进行Active Directory查找,但是该选项并不完全在桌子上。

以下是我发现的几件事,但它们都是我试图做的事情的部分解决方案,我不确定如何将它们放在一起。get-credential提示用户选择一张智能卡并输入他们的PIN,它可以在前固定的内容,但是在后面,它返回一个包含用户名的pscredential对象(以某种方式进行了编码,但我找不到使用了哪些编码,或者可能是UID)和Securestring密码(未经验证,用户可以留下空白或输入任何内容)。我不知道该怎么做以获取我想要的信息。Get-Aduser似乎无法使用pscredential对象作为身份返回用户对象。我缺少或不了解这一点吗?我想做的是可能的吗?

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.security/get-credential?view=powershell-5.1

查看智能卡上的所有证书

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-now-to-enumerate-all-certificates-certificates-on-a-a-a-a-smart-card-powershell/最后一个链接似乎会起作用,但我不确定如何使用它。该文档非常稀疏。

如果我想根据插入的智能卡处理证书,我将使用certutil.exe提取所有智能卡信息。然后从结果文本中获取证书序列号,然后查询当前使用者我的证书存储,与序列号匹配。获得证书后,我将使用-OutputMode Single参数将该信息传递给Out-GridView,以允许用户选择证书。从那里您可以根据所示证书获得用户的信息。

$SCSerials = certutil -scinfo -silent | Where{$_ -match 'Serial Number: (S+)'} | ForEach {$Matches[1]}
$SelectedThumb = Get-ChildItem Cert:CurrentUsermy | Where{$_.SerialNumber -in $SCSerials} | Select Subject,Issuer,NotBefore,NotAfter,Thumbprint | Out-GridView -Title 'Select a smartcard certificate.' -OutputMode Single |% Thumbprint
$UserCert = Get-Item Cert:CurrentUserMy$SelectedThumb

然后 $UserCert.Subject是用户的杰出名称,您可以使用它来查询广告或任何您想要的东西。

最新更新