0

我正在尝试学习如何使用 VS 2013 为 powershell 4.0 编写 snapin。该脚本非常简单并且编译时没有错误。但是,当我添加 gacutil 和 installutil 以使用 post-built 部署管理单元时,我收到此错误:

Error   1   
The command ""C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\gacutil.exe" -if "Tools.Powershell.Printscreen.dll"
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" "Tools.Powershell.Printscreen.dll"" exited with code -1.

但是,如果我复制命令并从命令提示符运行它,则两个命令都成功运行并且安装成功部署。然后我可以将管理单元添加到 powershell,管理单元也成功运行。

我检查了,使用的框架是正确的 4.5.1,VS 2013,系统是 windows 8.1

构建后的命令是:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\x64\gacutil.exe" -if "$(TargetPath)"
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe" "$(TargetPath)"

我认为此时 snapin 的代码无关紧要,但如果您希望我包括在内,请告诉我。我不相信它会在这一点上影响解决方案,因为它充其量是简单的,并且在我使用命令提示符手动部署它之后它就起作用了。

请指教。

谢谢!

4

1 回答 1

2

为什么要构建管理单元,除非您需要针对 V1,而如果您针对 .NET 4.5.1 进行编译则不能。我建议使用module. 无需注册/安装。您只需将模块 xcopy 到目标系统 ($home\Documents\WindowsPowerShell\Modules) 并使用它。我建议您为您的模块创建一个 PSD1 清单文件。这RootModule将是您的 dll 的名称:Tools.Powershell.Printscreen.dll。查看New-ModuleManifest命令以获取创建PSD1文件的帮助。它是基本的东西,如作者姓名、版本、唯一标识模块的 GUID 等。我还建议您在CmdletsToExport字段中列出导出的 cmdlet。这将加速自动模块加载的处理。

紧要关头,出于测试目的,您可以直接导入 dll(无需创建 PSD1 文件):

Import-Module -assembly c:\temp\Tools.Powershell.Printscreen.dll
于 2014-07-31T23:06:42.900 回答