微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

安装PowerShell模块并使用它,而无需重新启动PowerShell会话

如何解决安装PowerShell模块并使用它,而无需重新启动PowerShell会话

我试图找到一种方法来安装适用于PowerShell 4.1的AWS工具,然后立即使用随附的cmdlet与S3进行交互。我曾尝试安装MSI,但只有在开始新的PS会话后才能使用。而且我尝试使用Install-Module -Name AWS.Tools.Common,但这告诉我我需要Package Provider的更新版本并使用Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force。但这失败了

警告:无法从URI下载 'https://go.microsoft.com/fwlink/?LinkID=627338&clcid=0x409'到“。 警告:无法下载可用提供商列表。检查一下 您的互联网连接。

互联网连接很好。

我的实用程序是一个脚本,它将在客户端计算机上运行,​​这些脚本通常由非技术人员在“本机”上运行,以启用使用AWS S3镜像Autodesk Revit内容库的内容管理系统。简而言之,我需要一种能够正常工作,每次都能工作并且不会强迫员工像IT人员那样工作的东西。 因此,是否有一种防弹方法可以做到这一点,或者这是否超出了我需要寻找其他解决方案的PowerShell预期用例?我宁愿跳过NuGet,它似乎非常讨厌IT人员,只提供一个MSI,但是如果可以使NuGet在100%的时间内都可以工作并且无需重新运行脚本就可以使用该软件包,那就可以了。 >

解决方法

据我(现在)所了解,NuGet实际上更适合在Visual Studio中工作的开发人员,而不是需要将模块作为自己的依赖项安装的基于PowerShell的客户端工具。所以,这并不是我需要的解决方案。 就是说,我发现使用MSI的秘诀在于在安装完成后手动添加模块路径,而将其作为临时路径来添加。所以...

$installerPath = 'PATH TO... \AWSToolsAndSDKForNet_sdk-3.5.2.0_ps-4.1.0.0_tk-1.14.5.0.msi'
$awsModulePath = 'C:\Program Files (x86)\AWS Tools\PowerShell\'
$installProcess = Start-Process msiexec.exe -ArgumentList "/I $installerPath /quiet" -PassThru
$installProcess.WaitForExit()
$env:PSModulePath = $env:PSModulePath + "$([System.IO.Path]::PathSeparator)$awsModulePath"

这将运行安装程序,该安装程序会将AWS路径添加到模块路径以进行后续会话,这是安装的一部分。但是临时模块路径添加允许在此会话中立即使用模块,而不会加倍路径的AWS部分。 下一个改进是基于安装返回代码的条件,以添加模块路径并继续仅在成功安装后才需要模块的任何代码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。