問候地球人,
我正在尋找有關我當前面臨的挑戰的一些指導。我在某種程度上是 PowerShell 的中級用戶,但是,我的知識存在一些差距。我不是在尋找一個完整的解決方案,只是一些指導。我想非常清楚這一點,因為似乎有些人希望有人為他們撰寫所有代碼,或者面臨假設,事實并非如此。
我想要的結果是獲取 AWS 賬戶中每個正在運行的實體的缺失補丁資訊,并將該資料放入 Excel 作業簿中,每個實體都有自己的作業表,其中包括與鍵匹配的標題和顯示每個值的相應列JSON 檔案。我已經嘗試了多種方法來實作這一點,但我遇到了一些挑戰。任何幫助/指導將不勝感激。同樣,我不是在找人為我撰寫所有代碼。我正在努力學習如何釣魚,而不是 WHO 可以為我釣魚——盡管在創業世界中,找到 WHO 是成功的關鍵。
到目前為止我的代碼:
$instance_source = "C:\missing-patches\instance_source.txt"
# Get running instanceIds and write them to a source text file.
aws ec2 describe-instances --profile $PROFILE --query "Reservations[*].Instances[*].{InstanceId: InstanceId}" --filters "Name=instance-state-name,Values=running" --output text | Out-File $instance_source
# Get content from source text file, then query each AWS instance for missing patches, then write to file
foreach($instance_id in Get-Content $instance_source){
$writeToJsonFile = "C:\missing-patches\running-instances\$instance_id.json"
aws --profile $PROFILE ssm describe-instance-patches --instance-id $instance_id --filters Key=State,Values=Missing --output json | Out-File $writeToJsonFile
}
# Convert each JSON in the directory and import to an Excel workbook/worksheet
$pathToJsonFiles = Get-ChildItem "C:\missing-patches\running-instances\"
foreach($json_file in $pathToJsonFiles){
Get-Content $pathToJsonFiles -Raw | ConvertFrom-Json | Export-Excel .\missing-patches.xlsx -WorksheetName $json_file.BaseName
}
Remove-Item $instance_source
一個有效 JSON 檔案的內容:
{
"Patches": [
{
"Title": "2020-10 Cumulative Update for .NET Framework 4.8 for Windows Server 2016 for x64 (KB4578969)",
"KBId": "KB4578969",
"Classification": "SecurityUpdates",
"Severity": "Important",
"State": "Missing",
"InstalledTime": "1969-12-31T19:00:00-05:00"
},
{
"Title": "Security Update for Windows Server 2016 for x64-based Systems (KB4535680)",
"KBId": "KB4535680",
"Classification": "SecurityUpdates",
"Severity": "Critical",
"State": "Missing",
"InstalledTime": "1969-12-31T19:00:00-05:00"
},
{
"Title": "2021-09 Servicing Stack Update for Windows Server 2016 for x64-based Systems (KB5005698)",
"KBId": "KB5005698",
"Classification": "SecurityUpdates",
"Severity": "Critical",
"State": "Missing",
"InstalledTime": "1969-12-31T19:00:00-05:00"
}
]
}
.xlsx 中的結果顯示的是物件而不是物件的值,一個字串:
"Patches"
"System.Object[]"
"System.Object[]"
"System.Object[]"
我知道還有更多內容,所以請耐心等待并理解我對編碼/PowerShell 的了解并不多;我通過經驗而不是理論來學習。對人好點。一些回應者認為你應該知道一切或責備你,因為你不知道。提前致謝!
uj5u.com熱心網友回復:
你需要挖1項更深層次地輸出的內容中的Patches屬性,而不是擁有它的父物件:
Get-Content $pathToJsonFiles -Raw | ConvertFrom-Json |ForEach-Object -MemberName Patches | Export-Excel .\missing-patches.xlsx -WorksheetName $json_file.BaseName
呼叫ForEach-Object Patches將只從輸入物件中提取該屬性的值(類似于Select-Object -ExpandProperty)
uj5u.com熱心網友回復:
對于那些需要類似的東西,這是我使用的完整代碼。隨意編輯您的需求:
# Get running instanceIds and write them to a source text file.
$instance_source = "C:\missing-patches\instance_source.txt"
aws ec2 describe-instances --profile $PROFILE --query "Reservations[*].Instances[*].{InstanceId: InstanceId}" --filters "Name=instance-state-name,Values=running" --output text | Out-File $instance_source
# Get content from source text file, then query each AWS instance for missing patches, then write to file
foreach($instance_id in Get-Content $instance_source){
$writeToJsonFile = "C:\missing-patches\running-instances\$instance_id.json"
aws --profile $PROFILE ssm describe-instance-patches --instance-id $instance_id --filters Key=State,Values=Missing --output json | Out-File $writeToJsonFile
}
#Convert each JSON in the directory and import to an Excel workbook/worksheet
foreach($json_file in $pathToJsonFiles){
$pathToJsonFiles = Get-ChildItem "C:\missing-patches\running-instances\"
Get-Content $json_file -Raw | ConvertFrom-Json | ForEach-Object -MemberName Patches | Export-Excel -Path .\missing-patches.xlsx -WorksheetName $json_file.BaseName -AutoSize
}
Remove-Item $instance_source
Remove-Item "C:\missing-patches\running-instances\*.json"
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/409802.html
標籤:
