我正在嘗試使用 PowerShell在download-from-s3-with-aws-cli-using-filter-on-specific-prefix中復制答案。我嘗試使用whats-the-equivalent-of-xargs-in-powershell 中的方法,并且已經接近從 S3 ls 獲取密鑰名稱并將其傳遞給呼叫命令。
,@(Get-ChildItem -recurse | aws s3 ls s3://s3-bucket-name/year_2022/ABCDEFT-8D) | Select-Object -ExpandProperty syncroot | Select-Object @{Name='KeyName';Expression={$_.split(" ")[-1]}} | %{&"aws" s3 cp s3://s3-bucket-name/year_2022/$_ .}
盡管它迭代并獲取 Select-Object 中的所有鍵名,但在 foreach 中它最終通過
s3://s3-bucket-name/year_2022/@{KeyName=ABCDEFT-8D-FILE1.XML}
s3://s3-bucket-name/year_2022/@{KeyName=ABCDEFT-8D-FILE2.XML}
我得到了未找到密鑰的錯誤。在四處搜索后,我嘗試將 $_ 替換為 @_ 但這樣做會將引數傳遞為 s3://s3-bucket-name/year_2022/@_
我在 powershell 方面沒有經驗,僅通過搜索現有答案就做到了這一點,但我無法弄清楚這一點。
作為參考,如果我在沒有呼叫的情況下運行 powershell 代碼
,@(Get-ChildItem -recurse | aws s3 ls s3://s3-bucket-name/year_2022/ABCDEFT-8D) | Select-Object -ExpandProperty syncroot | Select-Object @{Name='KeyName';Expression={$_.split(" ")[-1]}}
我明白了:
鍵名
ABCDEFT-8D-FILE1.XML
ABCDEFT-8D-FILE2.XML
...
據我所知,上面的輸出是一個哈希表,所以我認為 @_ 應該可以作業,但不能。
powershell版本是7.2.5
uj5u.com熱心網友回復:
我認為您希望 foreach-object 輸出一個字串,而不是 select-object 創建一個物件:
# return the last word
'one two three' | Foreach-Object { $_.split(" ")[-1] }
three
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/496655.html
上一篇:是否存在指定的(子)索引分隔符?
