检查字符串是否为 X509Store 路径或 PFX 文件
Check if string is X509Store path or PFX file
我需要检查字符串是证书存储(例如 "Cert:\CurrentUser\My"
)还是 pfx 文件路径(例如 "D:\PFXfiles\self-signed.pfx"
)
哪种方法更好用,为什么?每个 cons/pros 是多少?有更好的方法吗?
方法一:
if ($certLocation.ToUpper().Contains(".PFX"))
{
#it's a .pfx file
}
else
{
#it's a cert store
}
方法二:
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
}
我会使用 Split-Path
:
switch ((Split-Path $certLocation -Qualifier)) {
'cert:' { 'cert store' }
'c:' { 'file path' }
default { Write-Error "invalid provider: $_" }
}
如果需要,请检查 'file path' 脚本块中的扩展名。
你应该看到 magic number of file , I recommend to you use file
command exist in linux and the programmer provide for windows see this link
看我的例子
C:\Program Files (x86)\GnuWin32\bin>file.exe c:\Users\soheil\Desktop.pfx
c:\Users\soheil\Desktop.pfx; data
C:\Program Files (x86)\GnuWin32\bin>file.exe c:\Users\soheil\Desktop.pfx
c:\Users\soheil\Desktop.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
命令来查看幻数
对我来说,测试字符串会更好,因为仅操作字符串比解析路径、创建另一个对象然后读取该对象上的 属性 更有效,但实际上并非如此会改变任何事情。不过,我会做一些不同的事情。
if ($certLocation.Split(":")[0] -like "cert") {
#it's a cert store
}
else {
#it's a pfx
}
我会插话...如果您正在测试字符串以查看路径所在的位置,请使用 Resolve-Path cmdlet,并且 select 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 会告诉您它用来解析路径的人。如果您提供无效路径,这将引发错误,但应该为您提供有关项目存储位置的准确信息。可以添加错误捕获以捕获无效路径,但这取决于您。
我需要检查字符串是证书存储(例如 "Cert:\CurrentUser\My"
)还是 pfx 文件路径(例如 "D:\PFXfiles\self-signed.pfx"
)
哪种方法更好用,为什么?每个 cons/pros 是多少?有更好的方法吗? 方法一:
if ($certLocation.ToUpper().Contains(".PFX"))
{
#it's a .pfx file
}
else
{
#it's a cert store
}
方法二:
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
}
我会使用 Split-Path
:
switch ((Split-Path $certLocation -Qualifier)) {
'cert:' { 'cert store' }
'c:' { 'file path' }
default { Write-Error "invalid provider: $_" }
}
如果需要,请检查 'file path' 脚本块中的扩展名。
你应该看到 magic number of file , I recommend to you use file
command exist in linux and the programmer provide for windows see this link
看我的例子
C:\Program Files (x86)\GnuWin32\bin>file.exe c:\Users\soheil\Desktop.pfx
c:\Users\soheil\Desktop.pfx; data
C:\Program Files (x86)\GnuWin32\bin>file.exe c:\Users\soheil\Desktop.pfx
c:\Users\soheil\Desktop.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
命令来查看幻数
对我来说,测试字符串会更好,因为仅操作字符串比解析路径、创建另一个对象然后读取该对象上的 属性 更有效,但实际上并非如此会改变任何事情。不过,我会做一些不同的事情。
if ($certLocation.Split(":")[0] -like "cert") {
#it's a cert store
}
else {
#it's a pfx
}
我会插话...如果您正在测试字符串以查看路径所在的位置,请使用 Resolve-Path cmdlet,并且 select 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 会告诉您它用来解析路径的人。如果您提供无效路径,这将引发错误,但应该为您提供有关项目存储位置的准确信息。可以添加错误捕获以捕获无效路径,但这取决于您。