2016-03-23 17 views
1

Bir foreach döngüsünü yürüten bir powershell işlevi yazıyorum. Döngüler, her bir sunucu adından ana bilgisayarların bir metin dosyası listesinde geçer ve sonra her biri için boş alanı C'ye çeker ve sonra bir değişkene atar. Daha sonra başka bir döngü tekrar listeden geçer ve ana bilgisayarların adını alır ve sonra bir değişkene ekler.Çıkışı CSV'den Powershell foreach döngüsünden düzenleme

Ardından, döngülerden çektiği verileri içeren iki değişkeni alıp CSV'ye aktaran bir değişkenim var. Doğru verileri CSV'ye koyuyor ancak bunu belirli bir şekilde biçimlendirmek istiyorum. Geçerli csv çıkışı (örneğin 4 giriş için) 'sunucu 1' 'sunucu2' 'sunucu 3' 'sunucu 4' 'diskspacevalue1' '2' '3' '4' vb

Yani noktadayım İhtiyacım olan tüm verilere sahip olduğum yerde, ancak bir hücrenin sunucu adına sahip olması ve ardından yanındaki hücrenin ilgili değere sahip olması için onu düzenlemem gerekiyor.

Nesneler oluşturmam veya bir dizi kullanmam gerektiğini, ancak şu ana kadar yazdığım senaryoyu temel alarak istediğim biçimlendirmeyi uygulamak için ekleyebileceğim bir şey olup olmadığını merak ettim mi?

function diskcheck { 
    $freespace = Get-Content C:\temp2\DiskspaceProj\hosts.txt | Foreach-Object { 
     Get-WmiObject win32_logicaldisk -Computername $_ -Filter "DeviceID='C:'" | select -ExpandProperty "FreeSpace" 
    } 
    $hostName = Get-Content C:\temp2\DiskspaceProj\hosts.txt | Foreach-Object { 
     Get-WmiObject Win32_ComputerSystem -ComputerName $_ | Select -ExpandProperty "Name" 
    } 
    $output = "$hostname, $freespace" | echo > C:\temp2\DiskspaceProj\diskspace.csv 
} 
diskcheck 

cevap

3

iki ayrı dizi korumak etmeyin - Her iki özellik içeren nesnelerin biri dizi oluşturun:

diskcheck |Select Hostname,FreeSpace |Export-Csv C:\diskspace_output.csv -NoTypeInformation 
: Sonra bir dosyaya listesini vermek Export-CSV kullanmak

function diskcheck 
{ 
    param(
     [string]$Path = 'C:\temp2\DiskspaceProj\hosts.txt' 
    ) 

    Get-Content $Path |ForEach-Object { 
     New-Object psobject -Property @{ 
      Hostname = Get-WmiObject Win32_ComputerSystem -ComputerName $_ |Select -ExpandProperty Name 
      FreeSpace = Get-WmiObject win32_logicaldisk -Computername $_ -Filter "DeviceID='C:'" | select -ExpandProperty FreeSpace 
     } 
    } 
} 

+0

Bu harika çalışıyor. Ancak CSV'de garip bir çıktı alıyorum. Değerler her hücrede 'System.Object []' olarak gösterilir. Herhangi bir fikir? –

+0

iyi çalıştığını çiziyor. Yazımın sonu. –