2

我有一个脚本可以完美地使用 Windows PowerShell 上传到 S3 存储桶,但它不适用于 PowerShell Core。根据亚马逊的说法,大多数在一个中工作的 cmdlet 应该在另一个中工作。

这是我正在使用的命令:

Write-S3Object -BucketName $bucketName -Folder $localDir -KeyPrefix $targetFolder -AccessKey $accessKey -SecretKey $secretKey -Recurse

同样,当我尝试直接在 PowerShell 中运行命令时,它按预期工作,但在 PowerShell Core 中出现此错误:

Write-S3Object : The term 'Write-S3Object' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ Write-S3Object -BucketName "cloud-storage-poc" -Folder "C:\Users\Admi ...
+ ~~~~~~~~~~~~~~
+ CategoryInfo          : ObjectNotFound: (Write-S3Object:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
4

1 回答 1

4

对于 PowerShell Core,您需要在脚本或命令运行之前显式导入 AWSPowerShell.NetCore 模块。由于模块中有大量 cmdlet(目前超过 5000 个),我们目前无法在模块清单中列出导出的 cmdlet 名称,并且正在探索其他替代方案(例如将来创建每个服务模块,但还没有 ETA)。

假设一台“干净”的机器,那么

Install-Module AWSPowerShell.NetCore
Import-Module AWSPowerShell.NetCore
Write-S3Object ...

那么应该为你工作。当然,如果您已经安装了正确的模块,那么您可以跳过第一个命令。我为 Windows 和 Core 设置了我的 PowerShell 配置文件以始终进行导入。

为什么这适用于 Windows,对于某些人来说,直到去年年中,我们确实在清单中列出了导出的 cmdlet。然而,当我们通过模块中的 4000 个 cmdlet 计数时,由于隐藏限制,发布到 PowerShell 库被阻止,并迫使我们停止列出它们。使用清单中列出的导出 cmdlet,PowerShell 不需要显式导入语句。

于 2019-02-01T16:20:40.557 回答