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

问题描述:

所以,我一直在研究/谷歌搜索在最后2个小时,我几乎在泪水点......如何生成自签名证书并使用它签署我的PowerShell脚本?

我不能用新SelfSignedCertificate,因为我是在Windows 7 我不能使用makecert是因为一个错误,它不允许我安装SDK for Windows 7,因为它认为我有.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' 

我,而不是得到像 “术语”。\进口XLS.ps1' 没有被识别为cmdlet的名称,具有一定的参考的应用程序数据\本地的\ Temp \ QuestSoftware \沿的PowerGUI \文件夹。

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

谢谢你们。

+0

使用自签名证书签署脚本不会在未提供该特定证书的计算机上使脚本“可信”。 – bluuf

+0

如果他们使用“Set-ExecutionPolicy RemoteSigned”,对吧? 一些想要使用此脚本的人不喜欢将安全性移除到允许未签名的远程脚本运行级别的想法。 – XViper

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

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,也需要使用相对路径。

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

+0

真棒这对我有效,但我不得不使用'[AppDomain]'而不是'[System.AppDomain]' –

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

+0

嘿迈克。 是的,我最后试过,但是$ Outfile和$ Content文件仍然不起作用。 我通过设置绝对路径解决了这个问题,但这使得脚本非常不灵活。 是否有任何其他已知的创建.exe的方法? (或者我应该问一个新的问题?) 谢谢。 – XViper

+0

另外,如果我可以使用 '$ ScriptPath =分割路径$ MyInvocation.MyCommand.Path'的某种变体 然后使用'$ ScriptPath \ $ OutFile =“\ TEST.txt”' '$ Content = Import -XLS'“$ ScriptPath \ TEST.xlsx”' 但我似乎无法得到那个工作。 – XViper

+0

如果它在点源以外的事情上没有成功,我就不会费心去深入研究它,但无论如何,所有的事情都会很痛苦。但是一旦将它导入到证书存储中,就可以重新签署脚本[更多信息请参见此处](https://technet.microsoft.com/zh-cn/library/cc754489(v = ws.11).aspx)应该像运行Set-AuthenticodeSignature一样简单,并提供正确的参数[更多在这里](https://blogs.technet.microsoft.com/heyscriptingguy/2010/06/17/hey-scripting-guy-how-can -i-sign-windows-powershell-scripts-with-an-enterprise-windows -pki-part-2-of-2) –