[英]What is the best way to collect and transform output from multiple PowerShell threads?
我是PowerShell腳本的新手,並希望執行以下操作:
給定配置名稱和服務器的列表,請從每個服務器返回配置的值。
轉換它們的方式是按配置名稱而不是服務器將其分組。
當前,我有一個腳本,該腳本在每個服務器上產生一個作業,並在服務器上遠程調用腳本以返回該服務器的配置列表。
但是,我不知道如何聚合和轉換這些作業的輸出,因此我不想先按服務器獲取配置名稱,而是先按配置名稱對它們進行排序,然后對服務器進行排序。
電流輸出:
Server1:
Config1 = 'abc'
Config2 = 'def'
Server2:
Config1 = 'xyz'
Config2 = '123'
所需的輸出:
Config1:
Server1 : 'abc'
Server2 : 'xyz'
Config2:
Server1 : 'def'
Server2 : '123'
我不想遍歷配置名稱,因為那樣會浪費時間為每個調用連接到服務器。 因此,我想遍歷服務器並進行某種轉換。
我想知道是否要讓每個作業返回某種字典,然后在所有線程完成轉換之后在它們上進行迭代?
這是調用作業的代碼:
$all_servers = @('server1', 'server2')
$config_names = @('config1', 'config2')
foreach($servername in $all_servers) {
Start-Job -FilePath C:\scripts\get_config_from_servers.ps1
-ArgumentList $servername,$config_names
}
Get-Job | Wait-Job
Get-Job | Receive-Job | Out-GridView
這是作業腳本:
Param($servername,$config_names)
$session = Get-Session -computername $servername
-username $$$$
-pwd ####
try {
$sb = {
param($servername,$config_names)
$output = @{}
foreach ($cfg in $config_names) {
$config_value = Get-Config -configname $cfg
$output.Add("$servername : $cfg", "($config_value)")
}
write-host $output | Out-String
return $output | Out-String
}
$out = Invoke-Command -session $session
-ScriptBlock $sb
-ArgumentList $servername,$config_names
write-host $out
return $out
}
finally {
Remove-PSSession $session
}
而不是使一個哈希表,並轉換成字符串的,你可以在你的工作腳本創建一些自定義對象就是這樣的SO問題
代替這個:
$output = @{}
foreach ($cfg in $config_names) {
$config_value = Get-Config -configname $cfg
$output.Add("$servername : $cfg", "($config_value)")
}
write-host $output | Out-String
return $output | Out-String
您可以嘗試這樣的事情:
$output = New-Object System.Object
Add-Member -MemberType NoteProperty -Name Server -Value $servername -InputObject $output
foreach ($cfg in $config_names) {
$config_value = Get-Config -configname $cfg
Add-Member -MemberType NoteProperty -Name "Config$cfg" -Value $config_value -InputObject $output
}
write-host $output
return $output
由於我不確定Get-Config
是什么,因此我無法進行准確的測試,但希望它足以讓您思考。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.