none
Powershell Array spalten RRS feed

  • Frage

  • Hallo zusammen

    Ich habe eine Frage bezüglich eines Arrays:

    Aber hier erst einmal der Quellcode:

    Param ( [string]$Path = "N:\", [string]$ReportPath = "N:\Test", [switch]$Recurse ) Function AddObject { Param ( $FileObject ) $Size = [double]($FSO.GetFolder($FileObject.FullName).Size) $Script:TotSize += $Size # Got rid of the code that converted $Size from a double to a String here $Script:Report += New-Object PSObject -Property @{ 'Folder Name' = $FileObject.FullName 'Created on' = $FileObject.CreationTime 'Last Updated' = $FileObject.LastWriteTime Size = $Size Owner = (Get-Acl $FileObject.FullName).Owner } } Function CalculateSize { Param ( [double]$Size ) If ($Size -gt 1000000) { $ReturnSize = ($Size / 1GB) } Else { $ReturnSize = ($Size / 1MB) } Return $ReturnSize } Function Set-AlternatingRows { [CmdletBinding()] Param( [Parameter(Mandatory=$True,ValueFromPipeline=$True)] [object[]]$Lines, [Parameter(Mandatory=$True)] [string]$CSSEvenClass, [Parameter(Mandatory=$True)] [string]$CSSOddClass ) Begin { $ClassName = $CSSEvenClass } Process { ForEach ($Line in $Lines) { $Line = $Line.Replace("<tr>","<tr class=""$ClassName"">") If ($ClassName -eq $CSSEvenClass) { $ClassName = $CSSOddClass } Else { $ClassName = $CSSEvenClass } Return $Line } } } cls $Report = @() $TotSize = 0 $FSO = New-Object -ComObject Scripting.FileSystemObject #First get the properties of the starting path $Root = Get-Item -Path $Path AddObject $Root #Now loop through all the subfolders $ParamSplat = @{ Path = $Path Recurse = $Recurse } ForEach ($Folder in (Get-ChildItem @ParamSplat | Where { $_.PSisContainer })) { AddObject $Folder

    }

    $Info = $Report | select-object "Size", "Owner", "Folder Name"

    In $Info habe ich eigentlich alle Informationen die ich brauche und jetzt ist meine Frage wie kann ich machen das "Size" zu normalen Zahlen werden , denn ein Object in "Size sieht so aus "@{Size=2583774159}"


    Dominique Hofmann

    Dienstag, 5. November 2013 10:36

Antworten

  • Param (
    	[string]$Path = "D:\",
    	[string]$ReportPath = "D:\Temp",
        [switch]$Recurse
    )
    
    Function AddObject {
        Param (
            $FileObject
        )
    
        
    	$FileObject
    	$Size = [double]($FSO.GetFolder($FileObject.FullName).Size)
        $Script:TotSize += $Size
        
        # Got rid of the code that converted $Size from a double to a String here
    
        $Script:Report += New-Object PSObject -Property @{
            FolderName = $FileObject.FullName
            CreatedOn = $FileObject.CreationTime
            LastUpdated = $FileObject.LastWriteTime
            Size = $Size
            Owner = (Get-Acl $FileObject.FullName).Owner
        }
    }
    
    
    
    Function CalculateSize {
    	Param (
    		[double]$Size
    	)
    	If ($Size -gt 1000000)
    	{	$ReturnSize = ($Size / 1GB)
    	}
    	Else
    	{	$ReturnSize = ($Size / 1MB)
    	}
    	Return $ReturnSize
    }
    
    Function Set-AlternatingRows {
        [CmdletBinding()]
       	Param(
           	[Parameter(Mandatory=$True,ValueFromPipeline=$True)]
            [object[]]$Lines,
           
       	    [Parameter(Mandatory=$True)]
           	[string]$CSSEvenClass,
           
            [Parameter(Mandatory=$True)]
       	    [string]$CSSOddClass
       	)
    	Begin {
    		$ClassName = $CSSEvenClass
    	}
    	Process {
            ForEach ($Line in $Lines)
            {	$Line = $Line.Replace("<tr>","<tr class=""$ClassName"">")
        		If ($ClassName -eq $CSSEvenClass)
        		{	$ClassName = $CSSOddClass
        		}
        		Else
        		{	$ClassName = $CSSEvenClass
        		}
        		Return $Line
            }
    	}
    }
    
    cls
    $Report = @()
    $TotSize = 0
    $FSO = New-Object -ComObject Scripting.FileSystemObject
    
    #First get the properties of the starting path
    $Root = Get-Item -Path $Path 
    AddObject $Root
    
    #Now loop through all the subfolders
    $ParamSplat = @{
        Path = $Path
        Recurse = $Recurse
    }
    ForEach ($Folder in (Get-ChildItem @ParamSplat | Where { $_.PSisContainer }))
    {
    	AddObject $Folder
    }
    
    $Report | ForEach-Object {
    
    	# Das Objekt das gerade verarbeitet wird befindet sich in der Automatisch generierten Variable $_
    	
    	# Die Properties eines Objektes spricht man mit dem punkt als Pfadoperator an.
    	
    	Write-Host "Name des Ordners =  " + $_.FolderName
    	Write-Host "Grösse des Ordners =  " + $_.Size
    	Write-Host "Besitzer des Ordners =  " + $_.owner
    	Write-Host "----------------------------------"
    	
    	
    	# grösse vergleichen
    	If($_.Size -gt 500000) {
    		# Wenn ordner grösser als 500000 ist Anzeigen!
    		Write-Host "########################"
    		Write-Host "Ordner =  " + $_.FolderName +" ist Grösser als 500000 !"
    		Write-Host "########################"
    	}
    
    }


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Als Antwort markiert coolmanii Dienstag, 5. November 2013 14:09
    • Tag als Antwort aufgehoben coolmanii Dienstag, 5. November 2013 14:13
    • Als Antwort markiert coolmanii Dienstag, 5. November 2013 14:13
    Dienstag, 5. November 2013 12:50

Alle Antworten

  • Die fehlen noch viele Grundlagen im Umgang mit Objekten.
    Size ist kein Objekt sondern ein Property!

    Dein $Report enthält mehrere Objekte, die jeweils die Properties Size owner und "Folder Name" enthalten.

    Es ist nicht Hilfreich und sinnvoll den Namen von Objekt-Properties mit Leerzeichen zu erstellen! Ich habe das geändert.

    Param (
    	[string]$Path = "D:\",
    	[string]$ReportPath = "D:\Temp",
        [switch]$Recurse
    )
    
    Function AddObject {
        Param (
            $FileObject
        )
    
        
    	$FileObject
    	$Size = [double]($FSO.GetFolder($FileObject.FullName).Size)
        $Script:TotSize += $Size
        
        # Got rid of the code that converted $Size from a double to a String here
    
        $Script:Report += New-Object PSObject -Property @{
            FolderName = $FileObject.FullName
            CreatedOn = $FileObject.CreationTime
            LastUpdated = $FileObject.LastWriteTime
            Size = $Size
            Owner = (Get-Acl $FileObject.FullName).Owner
        }
    }
    
    
    
    Function CalculateSize {
    	Param (
    		[double]$Size
    	)
    	If ($Size -gt 1000000)
    	{	$ReturnSize = ($Size / 1GB)
    	}
    	Else
    	{	$ReturnSize = ($Size / 1MB)
    	}
    	Return $ReturnSize
    }
    
    Function Set-AlternatingRows {
        [CmdletBinding()]
       	Param(
           	[Parameter(Mandatory=$True,ValueFromPipeline=$True)]
            [object[]]$Lines,
           
       	    [Parameter(Mandatory=$True)]
           	[string]$CSSEvenClass,
           
            [Parameter(Mandatory=$True)]
       	    [string]$CSSOddClass
       	)
    	Begin {
    		$ClassName = $CSSEvenClass
    	}
    	Process {
            ForEach ($Line in $Lines)
            {	$Line = $Line.Replace("<tr>","<tr class=""$ClassName"">")
        		If ($ClassName -eq $CSSEvenClass)
        		{	$ClassName = $CSSOddClass
        		}
        		Else
        		{	$ClassName = $CSSEvenClass
        		}
        		Return $Line
            }
    	}
    }
    
    cls
    $Report = @()
    $TotSize = 0
    $FSO = New-Object -ComObject Scripting.FileSystemObject
    
    #First get the properties of the starting path
    $Root = Get-Item -Path $Path 
    AddObject $Root
    
    #Now loop through all the subfolders
    $ParamSplat = @{
        Path = $Path
        Recurse = $Recurse
    }
    ForEach ($Folder in (Get-ChildItem @ParamSplat | Where { $_.PSisContainer }))
    {
    	AddObject $Folder
    }
    
    $Report | ForEach-Object {
    
    	# Das Objekt das gerade verarbeitet wird befindet sich in der Automatisch generierten Variable $_
    	
    	# Die Properties eines Objektes spricht man mit dem punkt als Pfadoperator an.
    	
    	Write-Host "Name des Ordners =  " + $_.FolderName
    	Write-Host "Grösse des Ordners =  " + $_.Size
    	Write-Host "Besitzer des Ordners =  " + $_.owner
    	Write-Host "----------------------------------"
    
    }


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Dienstag, 5. November 2013 11:12
  • Danke für die verbesserte Version

    Und es stimmt ich bin noch ein Anfanger, der vor 5 Tagen mit Powershell angefangen hat (._.);

    "\/(o_O)\/"


    Dominique Hofmann

    Dienstag, 5. November 2013 12:07
  • Noch eine Frage kann man diese Properties mit einer Zahl  vergleichen um z.B zu sagen alle Zahlen die Über 500000 sind sollen in diese Variabeln mit ensprechenden Namen des Ordner und Besitzer ?

    Dominique Hofmann

    Dienstag, 5. November 2013 12:25
  • Param (
    	[string]$Path = "D:\",
    	[string]$ReportPath = "D:\Temp",
        [switch]$Recurse
    )
    
    Function AddObject {
        Param (
            $FileObject
        )
    
        
    	$FileObject
    	$Size = [double]($FSO.GetFolder($FileObject.FullName).Size)
        $Script:TotSize += $Size
        
        # Got rid of the code that converted $Size from a double to a String here
    
        $Script:Report += New-Object PSObject -Property @{
            FolderName = $FileObject.FullName
            CreatedOn = $FileObject.CreationTime
            LastUpdated = $FileObject.LastWriteTime
            Size = $Size
            Owner = (Get-Acl $FileObject.FullName).Owner
        }
    }
    
    
    
    Function CalculateSize {
    	Param (
    		[double]$Size
    	)
    	If ($Size -gt 1000000)
    	{	$ReturnSize = ($Size / 1GB)
    	}
    	Else
    	{	$ReturnSize = ($Size / 1MB)
    	}
    	Return $ReturnSize
    }
    
    Function Set-AlternatingRows {
        [CmdletBinding()]
       	Param(
           	[Parameter(Mandatory=$True,ValueFromPipeline=$True)]
            [object[]]$Lines,
           
       	    [Parameter(Mandatory=$True)]
           	[string]$CSSEvenClass,
           
            [Parameter(Mandatory=$True)]
       	    [string]$CSSOddClass
       	)
    	Begin {
    		$ClassName = $CSSEvenClass
    	}
    	Process {
            ForEach ($Line in $Lines)
            {	$Line = $Line.Replace("<tr>","<tr class=""$ClassName"">")
        		If ($ClassName -eq $CSSEvenClass)
        		{	$ClassName = $CSSOddClass
        		}
        		Else
        		{	$ClassName = $CSSEvenClass
        		}
        		Return $Line
            }
    	}
    }
    
    cls
    $Report = @()
    $TotSize = 0
    $FSO = New-Object -ComObject Scripting.FileSystemObject
    
    #First get the properties of the starting path
    $Root = Get-Item -Path $Path 
    AddObject $Root
    
    #Now loop through all the subfolders
    $ParamSplat = @{
        Path = $Path
        Recurse = $Recurse
    }
    ForEach ($Folder in (Get-ChildItem @ParamSplat | Where { $_.PSisContainer }))
    {
    	AddObject $Folder
    }
    
    $Report | ForEach-Object {
    
    	# Das Objekt das gerade verarbeitet wird befindet sich in der Automatisch generierten Variable $_
    	
    	# Die Properties eines Objektes spricht man mit dem punkt als Pfadoperator an.
    	
    	Write-Host "Name des Ordners =  " + $_.FolderName
    	Write-Host "Grösse des Ordners =  " + $_.Size
    	Write-Host "Besitzer des Ordners =  " + $_.owner
    	Write-Host "----------------------------------"
    	
    	
    	# grösse vergleichen
    	If($_.Size -gt 500000) {
    		# Wenn ordner grösser als 500000 ist Anzeigen!
    		Write-Host "########################"
    		Write-Host "Ordner =  " + $_.FolderName +" ist Grösser als 500000 !"
    		Write-Host "########################"
    	}
    
    }


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Als Antwort markiert coolmanii Dienstag, 5. November 2013 14:09
    • Tag als Antwort aufgehoben coolmanii Dienstag, 5. November 2013 14:13
    • Als Antwort markiert coolmanii Dienstag, 5. November 2013 14:13
    Dienstag, 5. November 2013 12:50