我有一個腳本,可以掃描我的域中的所有服務器,並將其輸出到兩個單獨的CSV文件 - 一個簡單且廣泛。通過幾個foreach收集信息,然後在腳本結尾處輸出csv
我在我的csv上寫了一行。這導致成千上萬的文件打開和文件關閉..我已經潛伏並理解我應該首先收集所有信息並將其全部寫入在腳本結尾處掃一遍。但我如何做到這一點與export-csv(最好使用函數)?
有沒有一種方法可以使用短和長列表相同的功能?
腳本每個域/服務器上執行許多任務,但我已經修剪下來到這對您的觀賞樂趣:
$domains = "no","se","dk"
# Loop through specified forests
foreach ($domain in $domains) {
# List all servers
$servers = Get-QADComputer
# Looping through the servers
foreach ($server in $servers) {
# GENERATE LONGLIST #
# Ping server
if (Test-Connection -ComputerName $server.name -count 1 -Quiet)
{
$Reachable = "Yes"
# Fetch IP address
$ipaddress = [System.Net.Dns]::GetHostAddresses($Server.name)|select-object IPAddressToString -expandproperty IPAddressToString
# Formatting output and export all info to CSV
New-Object -TypeName PSObject -Property @{
SystemName = ($server.name).ToLower()
Reachable = $Reachable
Domain = $server.domain
IPAddress = $IPAddress
} | Select-Object SystemName,Domain,IPAddress| Export-Csv -Path "longexport.csv" -append
}
else # Can't reach server
{
$reachable = "No"
$IPAddress = "Unknown"
# Formatting output and export all info to CSV
New-Object -TypeName PSObject -Property @{
SystemName = ($server.name).ToLower()
Reachable = $Reachable
Domain = $server.domain
} | Select-Object SystemName,Domain,IPAddress| Export-Csv -Path "shortexport.csv" -append
}
}
}
(讓我只想說,我知道,我不能這樣做 - append with export-csv,但我使用的是讓我這樣做的功能..)
謝謝! 「長」ping服務器,「短」不。我忘了從選擇的對象中刪除IPAddress :)有沒有辦法做不同的|從同一個對象中選擇對象? – Sune 2012-02-21 20:22:42
還有一件事..我在$ servers.length變量的幫助下顯示一個狀態欄。我能用這種方法做類似的事嗎? – Sune 2012-02-21 20:44:35
您可以將新對象保存到變量中,並通過管道將其選中並每次選擇不同的屬性。關於$ servers.length,您無法顯示它的長度,因爲您一次只能處理一個名稱。您可以創建一個變量並在每次迭代中增加它並顯示其值。 – 2012-02-21 20:56:10