【问题标题】:How do I generate a self-signed certificate and use it to sign my powershell script?如何生成自签名证书并使用它来签署我的 powershell 脚本?
【发布时间】:2016-07-08 12:45:27
【问题描述】:

所以过去 2 小时我一直在研究/搜索,而我几乎快要流泪了……

我无法使用 New-SelfSignedCertificate,因为我使用的是 Windows 7。 我不能使用 makecert,因为它认为我有一个 .NET 4 的预发布版本,所以它不允许我安装适用于 Windows 7 的 SDK,但我没有。尝试安装 .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 提交一个新问题。

谢谢大家。

【问题讨论】:

  • 使用自签名证书签署脚本不会使脚本在未提供该特定证书的机器上“受信任”。
  • 如果他们使用“Set-ExecutionPolicy RemoteSigned”,对吧?一些想要使用此脚本的人不喜欢将安全性降低到允许运行未签名的远程脚本的水平。

标签: powershell certificate key self-signed powergui


【解决方案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,也需要使用相对路径的人有所帮助。

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

【讨论】:

  • 太棒了,这对我有用,但我不得不使用 [AppDomain] 而不是 [System.AppDomain]
【解决方案2】:

所以我没有使用 PowerGUI 从脚本创建 .exe 文件,所以这有点摸不着头脑,但我猜它只是没有实现点源外部文件,如果这是唯一阻止你的事情从部署代码为什么不直接将 Import-XLS.ps1 中的函数复制到脚本主体中?

【讨论】:

  • 嘿迈克。是的,我最后试过了,但是 $Outfile 和 $Content 文件仍然不起作用。我通过设置绝对路径来解决这个问题,但这使得脚本非常不灵活。是否有任何其他已知的创建 .exe 的方法? (或者我应该为此问一个新问题吗?)谢谢。
  • 或者,如果我可以使用$ScriptPath = Split-Path $MyInvocation.MyCommand.Path 的某种变体然后使用$ScriptPath\$OutFile = "\TEST.txt" $Content = Import-XLS '"$ScriptPath\TEST.xlsx" 但我似乎也无法让它工作。
  • 如果它在点源以外的其他方面失败了,我不会费心去深入研究它,无论如何,一切都会很痛苦。但是,一旦将脚本导入证书存储区more on that here,就可以重新对脚本进行签名,它应该像运行 Set-AuthenticodeSignature 并提供正确的参数一样简单more on that here
  • 但这仍然只适用于将您添加为受信任根的人。如果您希望人们能够运行您的脚本而无需执行任何操作,只需单击鼠标右键,那么您将需要由可以提供受信任根证书的公司签署的证书。您可以通过快速谷歌搜索找到许多供应商,搜索“ssl 证书”之类的内容
  • 设法解决了我的问题。现在发布答案。不过感谢您的帮助和建议。肯定会调查该证书信息。谢谢大家。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 2019-04-18
  • 2018-03-02
  • 2018-06-08
  • 1970-01-01
  • 2016-12-04
相关资源
最近更新 更多