【发布时间】:2017-04-10 19:06:43
【问题描述】:
我创建了一个 PowerShell 脚本以在 AWS Windows 实例的用户数据中运行。如果我以管理员身份手动执行脚本,它会成功运行并且确实有效。
但是当我在用户数据中发送脚本时(在实例创建期间),它会引发异常。这发生在从系统帐户安装模块期间
EC2 Windows 2012 R2 上的 PowerShell 版本 = v4.0
Cannot bind argument to parameter 'Path' because it is an empty string.
2017-04-10T18:24:25.004Z: Ec2HandleUserData: Message: Executing C:Windowssystem32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy unrestricted . 'C:\Program Files\Amazon\Ec2ConfigService\Scripts\UserScript.ps1' from System account
2017-04-10T18:24:25.006Z: Ec2HandleUserData: Message: Executing User Data with PID: 1084
2017-04-10T18:24:34.639Z: Ec2HandleUserData: Message: ExitCode of User Data with PID: 1084 is 1
2017-04-10T18:24:34.642Z: Ec2HandleUserData: Message: The errors from user scripts: iex : Cannot bind argument to parameter 'Path' because it is an empty string.
At C: Program Files Amazon Ec2ConfigService Scripts UserScript.ps1:5 char:79
+ (new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1")
| ie ...
+
~~
+ CategoryInfo : InvalidData: (:) [Invoke-Expression], ParameterB
indingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorEmptyStringNotAl
lowed,Microsoft.PowerShell.Commands.InvokeExpressionCommand
2017-04-10T18:24:34.642Z: Ec2HandleUserData: Message: The output from user scripts:
2017-04-10T18:24:34.642Z: Background plugin complete: Ec2HandleUserData
解决/解决方案:这更多是 PsGet 模块问题,而不是 EC2 问题
https://github.com/psget/psget/issues/208
在系统帐户级别 PsGet 模块设置路径不正确。 截至目前,我已修改 PsGet.ps1 以读取我的自定义路径 $env:PSModulePath,并且它可以正常工作。
PsGet.Ps1 第 1615 行 注释 #Add-PathToPSModulePath -PathToAdd:$Destination -PersistEnvironment:$PersistEnvironment -Global:$Global
行添加:[Environment]::SetEnvironmentVariable("PSModulePath", ";C:{DirectoryIwantModulesToBe}\Modules", "Machine")
它在系统帐户级别有效,没有问题
感谢亚历克斯的帮助。
【问题讨论】:
-
当系统用户在 powershell 上调用 install-modules 时,这似乎是 PsGet 的问题 - github.com/psget/psget/issues/208
标签: windows powershell amazon-ec2