我用SNK-Files签署我的Dlls。通过visual studio构建可以毫无问题地完成这项工作。
现在我想验证我真正给它们强名的DLL。我发现this powershell script,但我认为powershell讨厌我的道路。
Clear-Host
$path="C:\Users\MyName\Desktop\BuildOutput\Debug"
$snPath = "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sn.exe"
foreach ($item in Get-ChildItem $path -Recurse -Include *.dll, *.exe)
{
$reportLine = $item.FullName + "," + $item.Extension
#validate integrity
$expression = $snPath + ' -vf "' + $item.FullName +'"'
$verify = Invoke-Expression $expression
$isValid = $verify | Select-String -Pattern "is valid"
if($isValid)
{
$reportLine = $reportLine + ",ist signiert"
}
else
{
$reportLine = $reportLine + ",ist nicht signiert"
}
#extract token
$expression = $snPath + ' -Tp "' + $item.FullName +'"'
$result = Invoke-Expression $expression
$tokenString = $result | Select-String -Pattern "key token is"
if($tokenString)
{
$token = $tokenString.Tostring().Substring(20)
$reportLine = $reportLine + "," +$token
}
$reportLine
}
我的错误是
在线:1个字符:19
- C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6.1 ...
- ~~~
- CategoryInfo:ObjectNotFound:(x86:String)[],CommandNotFoundException
- FullyQualifiedErrorId:CommandNotFoundException
我翻译了更多错误信息。
术语“x86”未被识别为cmdlet,函数,脚本文件或可执行文件的名称。 检查名称的拼写,或路径是否正确(如果包含),然后重试。
我是否必须逃离x86?如果是的话 - 我怎么能这样做?我试过了this。
我总是试着用同样的结果。
$snPath = "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sn.exe"
$snPath = ${env:CommonProgramFiles(x86)} + "\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sn.exe"
$snPath = ${env:ProgramFiles(x86)} + "\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sn.exe"
$snPath = [Environment]::GetEnvironmentVariable("ProgramFiles(x86)") + + "\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\sn.exe"
Powershell版本
专业:5
轻微:1
建立:14393
修订:103
修改
我修复了我的snPath
我举了更多例子
更多错误信息
答案 0 :(得分:2)
而不是
$expression = $snPath + ' -vf "' + $item.FullName +'"'
$verify = Invoke-Expression $expression
你可以这样做:
$verify = & $snPath -vf $item.FullName