2013-10-27 4 views
1

Как я могу изменить presenation на выходе мой код производит:Powershell - Изменить формат вывода

$apps = Import-CSV apps.csv 
$computers = Import-CSV compobj.csv 
foreach($computer in $computers) {  
    $computerLob = $computer.lob 
    $lobApps = $apps | ? {$_.lob -eq $computerLob } 
    foreach($app in $lobApps){ 
     $computerHostname = $computer.hostname 
     $appLocation = $app.location 
     $installed=Test-Path "\\$computerHostname\$appLocation"  
     New-Object PSObject @{Computer=$computer.hostname;App=$app.appname;Installed=$installed} 
    } 
} 

Я хотел бы для представления кода, который нужно изменить. Вот как это выглядит:

Name       Value                            
----       -----                            
Installed     True                            
App       App1                 
Computer      171.159.192.10 
Installed     True                            
App       App2                   
Computer      171.159.192.10 

Я хотел бы, чтобы это выглядело так:

Computer     App1 App2 
-----------    ------ ----- 
171.159.192.10   True  True 

ответ

2

Вы проходящий Хеш в New-Object в качестве аргумента CTOR вместо набора свойств. Измените его на:

New-Object PSObject -Property @{ 
    Computer=$computer.hostname 
    App=$app.appname 
    Installed=$installed 
} 
+0

Большое спасибо. Имеет ту же проблему, что и выше. Я получаю столбцы в следующем порядке «Установленный, приложение, компьютер» - могу ли я получить его в следующем порядке: «Компьютер, приложение, установлен». – theshizy

+0

@ Antoine-LaurentLavoisier: Вы не можете выбрать какой-либо заказ с предложением 'select' в Powershell? – Neolisk

+0

@Neolisk - не могли бы вы показать мне быстрый пример. Не знаете, как это работает при создании нового объекта. Я пытался переключить порядок в '-Property @ {...}' – theshizy

1

Если вы на PowerShell V3, а не использовать новый объект-вы можете сделать это:

[pscustomobject]@{Computer=$computer.hostname;App=$app.appname;Installed=$installed} 

на V2, не забудьте использовать -Property параметр, например:

new-object psobject -property @{Computer=$computer.hostname;App=$app.appname;Installed=$installed} 

И заставить порядок вывода можно использовать Format-Table:

$obj = new-object psobject -property @{Computer=$computer.hostname;App=$app.appname;Installed=$installed} 
$obj | Format-Table Computer,App,Installed 
+0

Они также используют 'New-Object' неправильно. – Joey

+0

Yup, это тоже. :-) –

+0

Это отлично работает! Но я получаю столбцы в следующем порядке «Installed, App, Computer» - могу ли я получить его в следующем порядке: 'Computer, App, Installed'. Пробовал играть с порядком всего, но он, похоже, не работает! – theshizy

0

Вот что я имею в виду (в последующей деятельности по вопросу OP спросил в комментариях, слишком большой, чтобы поместиться там):

function MyFunction(){ 
    $apps = Import-CSV apps.csv 
    $computers = Import-CSV compobj.csv 
    foreach($computer in $computers) {  
    $computerLob = $computer.lob 
    $lobApps = $apps | ? {$_.lob -eq $computerLob } 
    foreach($app in $lobApps){ 
     $computerHostname = $computer.hostname 
     $appLocation = $app.location 
     $installed=Test-Path "\\$computerHostname\$appLocation"  
     New-Object PSObject @{Computer=$computer.hostname;App=$app.appname;Installed=$installed} 
    } 
    } 
} 

MyFunction | select Computer,App,Installed 

уменьшенная тест, чтобы доказать выше должен работать:

function MyFunction(){ 
    New-Object PSObject -Property @{ 
    Computer="computer" 
    App="app" 
    Installed="installed" 
    } 
} 

MyFunction | select Computer,App,Installed 
Смежные вопросы