1

コードが生成する出力の表示を変更するにはどうすればよいですか。

$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
4

3 に答える 3

2

New-Objectプロパティ セットではなく、ctor 引数としてハッシュテーブルを渡しています。次のように変更します。

New-Object PSObject -Property @{
  Computer=$computer.hostname
  App=$app.appname
  Installed=$installed
}
于 2013-10-27T22:20:39.973 に答える
1

PowerShell V3 を使用している場合は、new-object を使用するのではなく、次のようにすることができます。

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

-PropertyV2 では、パラメーターを使用することを忘れないでください。

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
于 2013-10-27T22:20:16.963 に答える
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
于 2013-10-28T00:11:53.967 に答える