2017-09-08 76 views
-1

我正在为我们的帮助台处理带数据库后端的小型工作订单应用程序。其中一部分是跟踪我组织的笔记本电脑的一些基本信息(制造商,型号,序列号,分配给谁等)。我会使用像C#或Java这样的真正的编程语言,但由于我头脑中的人所支配的原因,我坚持使用Windows 10 Enterprise内置的可用内容,所以使用WPF的PowerShell。从PowerShell中的用户选定证书获取基本信息

我们的网络具有Windows域,具有大型Active Directory林和智能卡身份验证。如果可能的话,我想要做的是让用户选择他们的智能卡证书(使用此应用程序的用户将不同于登录到Windows的用户,即将插入多个智能卡)并使用UAC提示或获取-Credential提示。输入他们的PIN不是必需品,但确认他们的身份将会很好。我想要的只是从他们选择的证书/卡中检索一些基本信息,例如显示名称和电子邮件地址。我将使用电子邮件地址来查询我的数据库以获取其他信息,例如分配给他们的笔记本电脑。如果可能,我希望避免执行Active Directory查找,但该选项并不完全在表外。

下面是我发现的一些事情,但他们都是我想要做的部分解决方案,我不知道如何把它放在一起。 Get-Credential会提示用户选择一张智能卡并输入他们的PIN,这就是我在寻找的前端,但在后面它会返回一个包含用户名的PSCredential对象(以某种方式编码,但我无法找到使用哪种编码,或者它是UID)和SecureString密码(未验证,用户可以将其留空或输入任何内容)。我不知道该怎么做才能得到我想要的信息。 Get-ADUser似乎无法使用PSCredential对象作为标识返回用户对象。有什么我失踪或不了解这个?我正在尝试做什么?

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

View All Certificates On Smart Card

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/ 这最后一个环节,似乎是它的工作,但我不知道如何把它投入使用。文档非常稀少。

+0

您可以使用C#编写PowerShell cmdlet,然后在PowerShell中运行它们,因为这对您可能更容易。 https://msdn.microsoft.com/en-us/library/dd878342%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 – Persistent13

+0

除非智能卡具有该信息,否则您希望如何避免AD查找某处?另外:我建议看'Out-GridView'以避免在PS中创建一个WPF应用程序(非常不好玩)。最终,你想要做什么? – TheIncorrigible1

+0

当人们将笔记本电脑带到帮助台进行维修时,他们需要填写工单。目前的解决方案是一个MS Access数据库,它有一个非常错误的界面,输出一个PDF文件作为客户副本。我试图简化这个过程,并在同一个后端数据库上放置一个更好的前端。 – Zero

回答

2

如果我想使用基于当时插入的智能卡的证书,我将使用certutil.exe来提取所有智能卡信息。然后从结果文本中获取证书序列号并查询与序列号匹配的CurrentUser \ MY证书存储区。一旦我拥有了证书,我会将该信息传递给Out-GridView,其中-OutputMode Single参数允许用户选择证书。从那里你有基于证书显示的用户信息。

$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或任何你想要的。