1

私はpowershellを初めて使用するので、明らかなことを見逃していないことを願っています。サイトを検索してみましたが、この正確な問題への参照を見つけるのは困難です。パイプ区切りの csv ファイルから特定の列 (オブジェクト) のみを出力しようとしています。私の実際のファイルには、40 以上の列と数千のエントリがあります。私の希望は、他のpowershellコマンドを使用して、特定の列のみでデータを並べ替えて一意にすることです。残念ながら、データの最も単純な削減を機能させることさえできません。

私のサンプルファイル:

Letter | Number | IpAddress | Machine | User | Garbage
a | 5 | 127.0.0.1 | tower | Admin | randomcharacters
f | 193 | 127.0.0.2 | laptop | administrator | charactersrandom%
r | 2882 | 127.0.0.8 | workstation | user1 | nothi$gher@e

両方

import-csv .\sample.txt -Delimeter "|" | get-member
import-csv .\sample.txt -Delimeter "|" | select-object | get-member

同じ結果を提供する

Name        MemberType   Definition                            
----        ----------   ----------                            
Equals      Method       bool Equals(System.Object obj)        
GetHashCode Method       int GetHashCode()                     
GetType     Method       type GetType()                        
ToString    Method       string ToString()                     
Garbage     NoteProperty System.String Garbage=randomcharacters
IpAddress   NoteProperty System.String IpAddress =127.0.0.1    
Letter      NoteProperty System.String Letter =a               
Machine     NoteProperty System.String Machine =tower          
Number      NoteProperty System.String Number =5               
User        NoteProperty System.String User =Admin    

しかし、オブジェクトを指定すると、System.String が消えて、空白行だけが出力されます。

import-csv .\sample.txt -Delimiter "|" | select-object User | get-member


   TypeName: Selected.System.Management.Automation.PSCustomObject

Name        MemberType   Definition                    
----        ----------   ----------                    
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()             
GetType     Method       type GetType()                
ToString    Method       string ToString()             
User        NoteProperty  User=null

どこが間違っていますか?データをインポートして、数列だけを出力したいだけです。1 つ以上を指定すると失敗します。同様の投稿で読んだように {$_.User} オブジェクトを使用しようとしましたが、同じ問題が返されます。

4

2 に答える 2

0

Andy が述べたように、余分なスペースを含むプロパティ名と値を持つことができます。ファイルを解析する別の方法を次に示します。

Get-Content .\sample.txt | 
ForEach-Object {$_ -replace ' \| ','|'} | 
ConvertFrom-Csv -Delimiter '|'
于 2013-05-31T09:01:09.797 に答える