我正在使用 PowerShell 連接到負載均衡器的 API,這是為了能夠在各自的池中啟用/禁用服務器。
此腳本連接到 API,并且應該將 JSON 正文以及 URI 中的池名稱傳遞給 API
在這種情況下,我的命令對于單個池中的單個服務器如下所示:
$poolname = pool1
$json = get-content -path file.json
Invoke-WebRequest -Uri "https://load.balancer/pool/$poolname"-Method PATCH -Body $json -ContentType "application/json" -Headers $Headers -WebSession $session
現在我需要為該池中的每個池和服務器多次執行此操作(通過正文中的 JSON 發生)
我需要更新池名稱和正文的 JSON 內容。
我根據之前收集的資料更新每個池的池名稱,并根據檔案名創建一個 JSON 檔案,如下所示:
$location = (Get-ChildItem C:\Users\name\Documents\transform\*).Name
$action = foreach($name in $location){
Invoke-WebRequest -Uri "https://load.balancer/pool/$name" -UseBasicParsing -Method PATCH -Body $json -ContentType "application/json" -Headers $Headers -WebSession $session
}
這將毫無問題地更新池名稱。因此,我從 powershell 對每個池名稱的 API 進行了多次點擊
我還需要給出命令,來自同一位置的每個檔案的 JSON 內容。所以我最終得到如下所示的東西:
$action = foreach($name in $location){
$json = get-content $name
Invoke-WebRequest -Uri "https://load.balancer/pool/$name" -UseBasicParsing -Method PATCH -Body $json -ContentType "application/json" -Headers $Headers -WebSession $session
}
當 get-content 運行時,它會從位置 $name/$location 中的每個檔案中獲取所有內容,并將它們放入一個巨大的陣列中,該陣列包含在 $json 中,因此當 invoke-webrequest 運行時,它會得到很多 JSON 推送給它
我想要的是能夠做的是:
- 查看 URI $name(池名稱)
- 查找與池名稱相關的檔案
- 對該檔案使用 get-content 并將其存盤在 $json
- 在命令中傳遞 $json
- 回圈直到完成
我試圖復制每個專案,然后使用 foreach 和 foreach-object 對每個專案運行 get-content 命令,但這不起作用。
uj5u.com熱心網友回復:
Get-Content,你使用它的方式,應該只獲取一個檔案的內容。您看到陣列的原因是它的默認行為是決議檔案并將每一行作為陣列元素。如果您不需要該特定行為,則添加-Raw開關會將檔案作為單個字串加載,并且性能也會更高。
我也可能會遇到問題,因為您使用該name屬性作為Get-Content呼叫的位置,就好像您不在正確的位置一樣,您會遇到問題。因此,您應該使用FullName.
話雖如此,您還需要池名稱的名稱。這是一個修改后的示例,可以完成所有這些操作。
此外,如果您的檔案名有擴展名(例如:Pool1.txt而您的實際池沒有,那么您需要考慮到這一點。在這種情況下,只需取消注釋該$PoolName行并將$($Item.Name)部分替換為Invoke-WebRequestwith $PoolName。
$location = (Get-ChildItem C:\Users\name\Documents\transform\*)
$action = foreach ($item in $location) {
$json = get-content $item.FullName -Raw
#If the file have an extension and the poolname is named after it but without ext.
#$PoolName = [System.IO.Path]::GetFileNameWithoutExtension($item.name)
Invoke-WebRequest -Uri "https://load.balancer/pool/$($item.name)" -UseBasicParsing -Method PATCH -Body $json -ContentType "application/json" -Headers $Headers -WebSession $session
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/495232.html
