如何生成自签名证书并使用它来签署我的powershell脚本?

时间:2016-07-07 07:20:00

标签: powershell certificate key self-signed powergui

所以我在过去的2个小时里一直在研究/谷歌搜索,而且我几乎真的要流泪......

我不能使用New-SelfSignedCertificate,因为我在Windows 7上。 我不能使用makecert,因为它不允许我安装适用于Windows 7的SDK,因为它认为我有预发布版本的.NET 4,但我没有。尝试安装.NET 4通知我,我有一个新的或更好的版本。

我尝试了一个注册表黑客,我发现它可以解决这个问题,但遗憾的是没有用。

我已经下载了这个 https://gallery.technet.microsoft.com/scriptcenter/Self-signed-certificate-5920a7c6#content

但似乎无法完成我需要实际执行脚本签名所需的所有步骤,因此我可以将其提供给其他人安全使用。

我想我已经成功创建了证书(虽然我不确定我是否做得对。)

据我所知,我现在需要输入密码或密钥,然后将其导出?我仍然不确定我是如何专门签署我的脚本的,所以其他人可以像'签名'一样执行它。

谢谢你们。

如果有人知道如何在.exe文件中运行相对的.ps1路径,那么所有这些都可能是不必要的。

该脚本可以正常工作.ps1,但只要我使用PowerGUI将其编译成.exe,这些行就不起作用了。

. .\Import-XLS.ps1
$OutFile = ".\TEST$(get-date -Format dd-MM).txt"
$Content = Import-XLS '.\TEST.xlsx'

我反而喜欢这样的东西 “无法将术语'。\ import-XLS.ps1'识别为cmdlet的名称,以及对Appdata \ Local \ Temp \ QuestSoftware \ PowerGUI \文件夹的一些引用。

所以我猜测PowerGUI正在做一些奇怪的事情,但我不知道如何将.ps1转换为.exe。 根据主要问题的答案,我可以正式提交.exe文件的新问题。

谢谢你们。

2 个答案:

答案 0 :(得分:1)

所以我最终结合了两件事来解决这个问题。

Split-Path $MyInvocation.MyCommand.Path

[System.AppDomain]::CurrentDomain.BaseDirectory}

我需要同时使用两者,因为前者在.ps1中工作但在编译的.exe中不工作,而后者在编译的.exe中工作,但不在.ps1中工作。

由于PowerGUI编译.exe具有一致的路径文件夹名称,我最终使用了以下内容。

$ScriptPath = Split-Path $MyInvocation.MyCommand.Path
if ($ScriptPath -match 'Quest Software') {$ScriptPath = [System.AppDomain]::CurrentDomain.BaseDirectory}

我还将函数包含在.exe中(但没有必要)。 然后我使用$OutFile = "$ScriptPath\<Filename>.txt"$Content = Import-XLS "$ScriptPath\<Filename>.xlsx"

这意味着我现在可以使用.exe而不是尝试获取脚本的工作证书。同时还可以快速测试对它的更改,同时仍然是.ps1。

我希望这对将来使用PowerGUI制作.exe的人有帮助,他们也需要使用相对路径。

感谢那些提供帮助和建议的人。

答案 1 :(得分:0)

所以我没有使用PowerGUI从脚本创建.exe文件所以这是一个在黑暗中的镜头,但我猜它只是没有实现点源外部文件,如果这是唯一阻止你从部署代码开始,为什么不只是将Import-XLS.ps1中的函数复制到脚本体中?