1

所以我在过去的 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 提交一个新问题。

多谢你们。

4

2 回答 2

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的其他人有所帮助,他们也需要使用相对路径。

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

于 2016-07-08T04:43:58.143 回答
0

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

于 2016-07-07T13:42:54.050 回答