2017-08-28 22 views
0

私は、CSVからホスト名を取り、Get-ADComputerに対してファイルを保存し、元のCSVの特定の列に特定のオブジェクトを保存するスクリプトを作成しています。エクスポートGet-ADComputer to CSV

解決策は基本的なタスク(下のコード)のように見えますが、私の問題は、Get-ADComputerの出力は常に(Out-Stringを使って遊んだのを見ることができますが、 CSVを混乱させるようなNewLine文字やその他の書式設定の問題があります。

Clear-Host 
Import-Module ActiveDirectory 
$import = Import-Csv 'XXX' -Delimiter ';' 


Foreach ($row in $import){ 
    $hostname = $row.HOSTNAME 
    if($hostname.length -gt 3){ 
     $computer = Get-ADComputer -Filter {Name -like $hostname} -Properties LastLogonDate, LastLogonTimeStamp 
     $row.AD_LastLogon.ToString() = $computer | Select-Object LastLogonDate | Select-Object -first 1 | FT -HideTableHeaders | Out-String 
     $row.AD_LLTimestamp = $computer | Select LastLogonTimestamp |Select-Object -first 1 | FT -HideTableHeaders | Out-String 
    } 


} 
$import | Export-Csv 'XXX' -Delimiter ';' -NoType 

私の質問今、誰もが任意のフォーマットやヘッダに含ませずに、たとえばGet-ADComputer's LastLogonDateのための裸の文字列の結果を得るための方法で助けることができれば、です。

ありがとうございます!

答えて

2

-ExpandPropertyパラメータをSelect-Objectとすると、必要なパラメータだけを抽出できます。一度に1つのパラメータを指定することができます。

$row.AD_LastLogon = $computer | Select-Object -ExpandProperty LastLogonDate -First 1 | Out-String 
$row.AD_LLTimestamp = $computer | Select-Object -ExpandProperty LastLogonTimestamp -First 1 

私は-First 1が必要であるとは思わない。 Get-ADComputerは、同じ名前の複数のコンピュータを検出すべきではありません。

また、LastLogonDateとLastLogonTimestampの両方を取得する必要はありません。 The former is the same value as the latterは、LastLogonTimestampが使用する刺激的なNT Time EpochからDateTimeに変換されました。両方を必要とするシステムがありますか?

最後に、ちょうどノートこれは:

$row.AD_LastLogon.ToString() = $computer | [...] 

それは意味がありません。メソッドに値を代入することはできません。もしそれが誤りでも、そうでなければ全く何もしないなら、私は驚くだろう。

+0

.ToString()と-First 1、Out-Stringは、複数のバージョンからまとめてコピーしたので、この投稿にしました。それでも、これは動作するスクリプトではありません。 – phowner

+0

Select-Property Optionはいくつかの助けをしました。複数の代わりにTimeStampの前後に1つのNew-Lineを持つ出力があります。もちろん、私はDateとUnix-Timestampが何であるかを知っています。輸出の対象となるプログラムには両方とも必要です – phowner

+0

新しい文字列だけで文字列を取得するアイデアはありますか? – phowner