2016-05-13 3 views
0

Я пытаюсь запустить запрос в WSUS API через Powershell, который выводит имена компьютеров, необходимые исправления и т. Д., А затем мне нужно вставить это в файл журнала, который попадает в Splunk. мы можем сделать приборные панели и т.д.Powershell Convert Table To Array

Мой текущий код

$computerscope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope 
    $LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss" 
    $updatescope = New-Object Microsoft.UpdateServices.Administration.UpdateScope 
    $wsus.GetSummariesPerComputerTarget($updatescope,$computerscope) | 
    Select-Object $logtime,@{L=’ComputerTarget';E={($wsus.GetComputerTarget([guid]$_.ComputerTargetId)).FullDomainName}}, 
    @{L=’NeededCount';E={($_.DownloadedCount + $_.NotInstalledCount)}},DownloadedCount,NotApplicableCount,NotInstalledCount,InstalledCount,FailedCount | Select-String Computer 

выход выходит так:

@{05-13-2016_05-12-25=; ComputerTarget=########; NeededCount=12; DownloadedCount=0; NotApplicableCount=82245; NotInstalledCount=12; InstalledCount=23; FailedCount=0} 

мне это нужно, чтобы выглядеть следующим образом:

05-13-2016_05-12-25=; ComputerTarget=#######; NeededCount=12; DownloadedCount=0; NotApplicableCount=82245; NotInstalledCount=12; InstalledCount=23; FailedCount=0 

Если вы хотите попробовать корень проблемы, я пытаюсь преобразовать таблицу в массивы так Splunk могут читать построчно, но это дает таблицу, в которой я пытаюсь преобразовать:

$computerscope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope 
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss" 
$updatescope = New-Object Microsoft.UpdateServices.Administration.UpdateScope 
$wsus.GetSummariesPerComputerTarget($updatescope,$computerscope) | 
Select-Object $logtime,@{L=’ComputerTarget';E={($wsus.GetComputerTarget([guid]$_.ComputerTargetId)).FullDomainName}}, 
@{L=’NeededCount';E={($_.DownloadedCount + $_.NotInstalledCount)}},DownloadedCount,NotApplicableCount,NotInstalledCount,InstalledCount,FailedCount ` 

, который дает выход:

05-13-2016_05-16-04 : 
ComputerTarget  : ######## 
NeededCount   : 12 
DownloadedCount  : 0 
NotApplicableCount : 82245 
NotInstalledCount : 12 
InstalledCount  : 23 
FailedCount   : 0 
+0

так что все, что вам нужно сделать, это удалить '@ {' и '}' вашего первого примера? –

ответ

0

похоже, вы только хотите, чтобы удалить ведущую @{ и заднюю }, которые вы могли бы сделать с регулярным выражением, как это:

...allyourcode... | Select-String Computer | ForEach-Object { $_.Line -replace '^\@\{(.*?)\}$', '$1' } 

Однако, создание Select-String конвертирует ваши объекты в строковые представления - это плохой способ экспортировать данные. Splunk может читать CSV-файлы, поэтому я бы рекомендовал использовать это (а также использовать реальное свойство для logtime). Пример:

$computerscope = New-Object Microsoft.UpdateServices.Administration.ComputerTargetScope 
$LogTime = Get-Date -Format "MM-dd-yyyy_hh-mm-ss" 
$updatescope = New-Object Microsoft.UpdateServices.Administration.UpdateScope 
$wsus.GetSummariesPerComputerTarget($updatescope,$computerscope) | 
Select-Object @{L="LogTime";e={ $logtime }},@{L=’ComputerTarget';E={($wsus.GetComputerTarget([guid]$_.ComputerTargetId)).FullDomainName}}, 
@{L=’NeededCount';E={($_.DownloadedCount + $_.NotInstalledCount)}},DownloadedCount,NotApplicableCount,NotInstalledCount,InstalledCount,FailedCount | 
Export-Csv -Path mydata.csv -NoTypeInformation