Packer 在脚本中调用 ngen.exe 以创建 AWS AMI
Calling ngen.exe in a script by Packer to create an AWS AMI
我有这个脚本,我需要在打包程序创建的 AWS AMI 中调用它:
$path = Get-ChildItem C:\WINDOWS\Microsoft.NET\Framework -Filter ngen.exe -Recurse | % { $_.FullName }
Invoke-Expression -Command $path[0] executequeueditems
我在这里所做的,首先是寻找 cmd ngen.exe 的路径,然后调用它。
这是我在打包程序输出中得到的错误:
2020-08-05T19:37:36+02:00: ==> amazon-ebs: Invoke-Expression : A positional parameter cannot be found that accepts argument 'executequeueditems'.
2020-08-05T19:37:36+02:00: ==> amazon-ebs: At C:\Windows\Temp\script-5f2ae86b-540f-14de-f644-90d9dee39092.ps1:2 char:1
2020-08-05T19:37:36+02:00: ==> amazon-ebs: + iex $path[0] executequeueditems
2020-08-05T19:37:36+02:00: ==> amazon-ebs: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2020-08-05T19:37:36+02:00: ==> amazon-ebs: + CategoryInfo : InvalidArgument: (:) [Invoke-Expression], ParameterBindingException
2020-08-05T19:37:36+02:00: ==> amazon-ebs: + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand
我不明白这里出了什么问题。
在我的笔记本电脑上,我可以毫无错误地调用这个命令。这是我笔记本电脑的输出:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>ngen.exe executequeueditems
Microsoft (R) CLR Native Image Generator - Version 4.7.3056.0
Copyright (c) Microsoft Corporation. All rights reserved.
All compilation targets are up to date.
C:\Windows\Microsoft.NET\Framework\v4.0.30319>
我不太了解 ngen.exe(我所做的只是为开发团队创建 AMI)但这里是文档:https://docs.microsoft.com/en-us/dotnet/framework/tools/ngen-exe-native-image-generator
似乎 executequeueditems
是正确的 command/option。
调用之前需要安装什么东西吗?
您不需要 Invoke-Expression
(事实上,it's not recommended)。
我认为你可以做到:
Get-ChildItem $env:SystemRoot\Microsoft.NET\Framework ngen.exe -Recurse | ForEach-Object {
& $_.FullName executequeueditems
}
请注意,如果它存在于 Framework
.
下的多个子目录中,这将 运行 ngen.exe
多次
我有这个脚本,我需要在打包程序创建的 AWS AMI 中调用它:
$path = Get-ChildItem C:\WINDOWS\Microsoft.NET\Framework -Filter ngen.exe -Recurse | % { $_.FullName }
Invoke-Expression -Command $path[0] executequeueditems
我在这里所做的,首先是寻找 cmd ngen.exe 的路径,然后调用它。
这是我在打包程序输出中得到的错误:
2020-08-05T19:37:36+02:00: ==> amazon-ebs: Invoke-Expression : A positional parameter cannot be found that accepts argument 'executequeueditems'.
2020-08-05T19:37:36+02:00: ==> amazon-ebs: At C:\Windows\Temp\script-5f2ae86b-540f-14de-f644-90d9dee39092.ps1:2 char:1
2020-08-05T19:37:36+02:00: ==> amazon-ebs: + iex $path[0] executequeueditems
2020-08-05T19:37:36+02:00: ==> amazon-ebs: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2020-08-05T19:37:36+02:00: ==> amazon-ebs: + CategoryInfo : InvalidArgument: (:) [Invoke-Expression], ParameterBindingException
2020-08-05T19:37:36+02:00: ==> amazon-ebs: + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeExpressionCommand
我不明白这里出了什么问题。 在我的笔记本电脑上,我可以毫无错误地调用这个命令。这是我笔记本电脑的输出:
C:\Windows\Microsoft.NET\Framework\v4.0.30319>ngen.exe executequeueditems
Microsoft (R) CLR Native Image Generator - Version 4.7.3056.0
Copyright (c) Microsoft Corporation. All rights reserved.
All compilation targets are up to date.
C:\Windows\Microsoft.NET\Framework\v4.0.30319>
我不太了解 ngen.exe(我所做的只是为开发团队创建 AMI)但这里是文档:https://docs.microsoft.com/en-us/dotnet/framework/tools/ngen-exe-native-image-generator
似乎 executequeueditems
是正确的 command/option。
调用之前需要安装什么东西吗?
您不需要 Invoke-Expression
(事实上,it's not recommended)。
我认为你可以做到:
Get-ChildItem $env:SystemRoot\Microsoft.NET\Framework ngen.exe -Recurse | ForEach-Object {
& $_.FullName executequeueditems
}
请注意,如果它存在于 Framework
.
ngen.exe
多次