检查字符串是否为X509Store路径或PFX文件

时间:2015-03-24 23:08:29

标签: powershell x509certificate

我需要检查字符串是否是证书存储(例如"Cert:\CurrentUser\My")或pfx文件路径(例如"D:\\PFXfiles\self-signed.pfx"

哪种方法更好用,为什么?每个人的利弊/利弊是什么?有更好的方法吗? 方法1:

if ($certLocation.ToUpper().Contains(".PFX"))
{
    #it's a .pfx file
}
else
{
    #it's a cert store
}

方法2:

if ((Resolve-Path -LiteralPath $certLocation).Provider.Name -eq "FileSystem")
{
    #it's a .pfx file
}
elseif ((Resolve-Path -LiteralPath $certLocation).Provider.Name -eq "Certificate"
{
    #it's a cert store
}

4 个答案:

答案 0 :(得分:1)

我会使用Split-Path

switch ((Split-Path $certLocation -Qualifier)) {
  'cert:' { 'cert store' }
  'c:'    { 'file path' }
  default { Write-Error "invalid provider: $_" }
}

如果需要,请检查“文件路径”脚本块中的扩展名。

答案 1 :(得分:0)


你应该看到magic number的文件,我建议你使用linux中存在的file命令,程序员提供的窗口看到这个link
看我的例子

C:\Program Files (x86)\GnuWin32\bin>file.exe c:\Users\soheil\Desktop\1.pfx
c:\Users\soheil\Desktop\1.pfx; data

C:\Program Files (x86)\GnuWin32\bin>file.exe c:\Users\soheil\Desktop\2.pfx
c:\Users\soheil\Desktop\2.pfx; empty

或者像这样

C:\Program Files (x86)\GnuWin32\bin>file.exe c:\a.txt
c:\a.txt; UTF-8 Unicode (with BOM) English text, with very long lines, with CRLF
 line terminators

首先1.pfx我用IIS创建自签 第二个2.pfx我将txt文件重命名为2.pfx
如果你想要完全理解什么文件,你应该使用file命令来查看幻数

答案 2 :(得分:0)

对我来说,测试字符串会更好,因为操作字符串vs解析路径,创建另一个对象然后读取该对象的属性会更有效,但实际上它是'不会改变什么。不过,我做的有点不同。

if ($certLocation.Split(":")[0] -like "cert") { 
    #it's a cert store
}
else {
    #it's a pfx
}

答案 3 :(得分:0)

我将进入...如果您正在测试字符串以查看路径所在的位置,请使用Resolve-Path cmdlet,并选择Provider属性。

$StringPath = "Cert:\CurrentUser\my","C:\Temp\fakecert.pfx"

Switch($StringPath){
    {(Resolve-Path $_|Select -Expand Provider).tostring() -eq "Microsoft.PowerShell.Security\Certificate"} {"$_ is in the Certificate Store";continue}
    {(Resolve-Path $_|Select -Expand Provider).tostring() -eq "Microsoft.PowerShell.Core\FileSystem"} {"$_ is in the File System"}
}

Cert:\CurrentUser\my is in the Certificate Store
C:\Temp\fakecert.pfx is in the File System

这样PowerShell会告诉你它用来解决路径的人。如果您提供无效路径,这将抛出错误,但应该为您提供有关项目存储位置的准确信息。可以添加错误捕获以捕获无效路径,但这取决于您。