我有一个脚本,可以完美地使用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:UsersAdmi ...
+ ~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Write-S3Object:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
对于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不需要显式导入语句。