2017-08-28 133 views
0

我正在研究從CSV獲取主機名的腳本,將它們歸檔爲Get-ADComputer,然後將某些對象保存在原始CSV的某些列中。將Get-ADComputer導出爲CSV

雖然解決方案看起來像一個基本的任務(代碼如下),但我的問題是,Get-ADComputer的輸出始終如一(你可以看到我用Out-String玩過,但也嘗試了其他格式化選項)包含很多NewLine字符或其他格式問題導致CSV混淆。

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來提取所需的參數。您一次只能指定一個參數來進行比較。

$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時間紀元轉換爲DateTime。你有一個需要兩個系統嗎?

最後,只是一張紙條,但這樣的:

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

它沒有意義。您不能爲方法賦值。如果沒有錯誤或者什麼都不做,我會感到驚訝。

+0

.ToString()以及-First 1,Out-String,使它成爲這篇文章,因爲我將它從我試過的多個版本複製到一起。再一次,這不是一個工作劇本。 – phowner

+0

Select-Property Option做了一些幫助,我知道在TimeStamp之前和之後只有一個New-Line,而不是Multiple。當然,我知道Date和Unix-Timestamp是什麼,導出的程序需要 – phowner

+0

任何想法,只要字符串,沒有任何新的行? – phowner