none
Excel / Powershell Zugriff auf Matrix RRS feed

  • Frage

  • Hallo zusammen,

    wieder mal ich mit einem kleinen Problem. Ich habe folgendes Excel-Tabellenblatt:

    Ich bin soweit:

    Ich brings einfach nicht fertig, das vernünftig zusammenzusetzen, das ich zum Beispiel bekomme:

    user.test1 GA-Gruppe1-R

    user.test2 GA-Gruppe1-R

    florian.reck GA-Gruppe1-R

    user.test1 GA-Gruppe2-R

    user.test2 GA-Gruppe2-C

    florian.reck GA-Gruppe2-C

    Hat jemand eine Idee?

    Grüsse

    Florian


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...

    Dienstag, 17. September 2013 12:17

Antworten

  • Ja das ist ein universeller Ansatz wo du die Zellen dann noch heraus Popeln musst.

    Ich würds so machen das ist vielleicht verständlicher? ;-)

    # Pfad zur Excel Datei
    $Excelfile = "c:\temp\Matrix_Trevaco_anonym.xlsx"
    # Excel COM Objekt erstellen
    $Excel = New-Object -ComObject Excel.Application 
    # Excel sichtbar machen
    $Excel.Visible = $true 
    # Excel öffnen
    $Workbook = $Excel.Workbooks.Open($Excelfile)
    # das erste worksheet benutzen (man kann auch den Namen nehmen)
    $Worksheet = $Workbook.Worksheets.item(1)
    
    # Zeile 1 auslesen bis die erste leere Zelle kommt 
    # beginnen bei Spalte
    $Spalte = 2
    do {
    
    	# Spalte A auslesen bis die erste leere Zelle kommt
    	# beginnen bei Zeile
    	$Zeile = 2
    	do {
    		
    		# Gruppe aus Spalte A auslesen in der Aktuellen Zeile
    		$SpalteA =  $Worksheet.Cells.Item($Zeile,1).Value()
    		
    		# User auslesen aus Zeile 1  und der Aktuellen Spalte
    		$Zeile1 = $Worksheet.Cells.Item(1,$Spalte).Value()
    		
    		# Matrix Zelle auslesen mit Aktueller Zeile und Spalte
    		$MatrixZelle = $Worksheet.Cells.Item($Zeile,$Spalte).Value()
    
    		# ergebnis Anzeigen
    		"User $Zeile1 in Gruppe $SpalteA  $MatrixZelle"
    
    		# vorrücken in die nächste Zeile
    		$Zeile++
    
    	# ende der DO Schleife zum auslesen der Spalte A	
    	} until ($($Worksheet.Cells.Item($Zeile,1).Value()) -eq $null)
    
    # vorrücken in die nächste Spalte
    $Spalte++
    
    # ende der DO Schleife zum auslesen der Zeile 1
    } until ($($Worksheet.Cells.Item(1,$Spalte).Value()) -eq $null)



    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Bearbeitet Peter Kriegel Dienstag, 17. September 2013 14:29 sdfsadas
    • Als Antwort markiert Florian Reck Mittwoch, 18. September 2013 05:54
    Dienstag, 17. September 2013 14:26

Alle Antworten

  • Hallo Florian!

    Schöne Bilder!

    Wie sieht den der PowerShell Code dazu aus? Oder wolltest du Bilder Tauschen ? ;-)

    wie wird denn deine Variable $ImportArrayExcel gefüllt ?


    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    Dienstag, 17. September 2013 13:52
  • Hallo Peter,

    danke für die Blumen ;-) . Die Excel Importfunktion habe ich geklaut, nämlich hier:

    http://podlisk.wordpress.com/2011/11/20/import-excel-spreadsheet-into-powershell/

    cls
    function Import-Excel
     {
       param (
         [string]$FileName,
         [string]$WorksheetName,
         [bool]$DisplayProgress = $true
       )
      
    if ($FileName -eq "") {
         throw "Please provide path to the Excel file"
         Exit
       }
    
      if (-not (Test-Path $FileName)) {
         throw "Path '$FileName' does not exist."
         exit
       }
    
      $FileName = Resolve-Path $FileName
       $excel = New-Object -com "Excel.Application"
       $excel.Visible = $false
       $workbook = $excel.workbooks.open($FileName)
    
      if (-not $WorksheetName) {
         Write-Warning "Defaulting to the first worksheet in workbook."
         $sheet = $workbook.ActiveSheet
       } else {
         $sheet = $workbook.Sheets.Item($WorksheetName)
       }
       
       if (-not $sheet)
       {
         throw "Unable to open worksheet $WorksheetName"
         exit
       }
       
       $sheetName = $sheet.Name
       $columns = $sheet.UsedRange.Columns.Count
       $lines = $sheet.UsedRange.Rows.Count
       
       Write-Warning "Worksheet $sheetName contains $columns columns and $lines lines of data"
       
       $fields = @()
       
       for ($column = 1; $column -le $columns; $column ++) {
         $fieldName = $sheet.Cells.Item.Invoke(1, $column).Value2
         if ($fieldName -eq $null) {
           $fieldName = "Column" + $column.ToString()
         }
         $fields += $fieldName
       }
       
       $line = 2
       
       
       for ($line = 2; $line -le $lines; $line ++) {
         $values = New-Object object[] $columns
         for ($column = 1; $column -le $columns; $column++) {
           $values[$column - 1] = $sheet.Cells.Item.Invoke($line, $column).Value2
         }  
       
         $row = New-Object psobject
         $fields | foreach-object -begin {$i = 0} -process {
           $row | Add-Member -MemberType noteproperty -Name $fields[$i] -Value $values[$i]; $i++
         }
         $row
         $percents = [math]::round((($line/$lines) * 100), 0)
         if ($DisplayProgress) {
           Write-Progress -Activity:"Importing from Excel file $FileName" -Status:"Imported $line of total $lines lines ($percents%)" -PercentComplete:$percents
         }
       }
       $workbook.Close()
       $excel.Quit()
     }
    $ImportArrayExcel = import-excel c:\temp\Matrix_Trevaco_anonym.xlsx
    
    $i = 0 
    forEach ($line in $ImportArrayExcel)
    {	
    	$ArrayRights = $ImportArrayExcel.SyncRoot[$i]
    	$i ++
    }

    Nun möchte ich die Werte vom $ImportArrayExcel in ein weiteres Array einfügen, so dass den Benutzernamen in eine Variable abfüllen kann, ebenso die Gruppe in eine Variable Packen + die Berechtigung (C oder R), damit ich dann in einer Schlaufe zum Beispiel ein add-adgroupmember $Gruppe"-"$Berechtigung $User machen kann..

    Gruss

    Florian


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...

    Dienstag, 17. September 2013 14:10
  • Ja das ist ein universeller Ansatz wo du die Zellen dann noch heraus Popeln musst.

    Ich würds so machen das ist vielleicht verständlicher? ;-)

    # Pfad zur Excel Datei
    $Excelfile = "c:\temp\Matrix_Trevaco_anonym.xlsx"
    # Excel COM Objekt erstellen
    $Excel = New-Object -ComObject Excel.Application 
    # Excel sichtbar machen
    $Excel.Visible = $true 
    # Excel öffnen
    $Workbook = $Excel.Workbooks.Open($Excelfile)
    # das erste worksheet benutzen (man kann auch den Namen nehmen)
    $Worksheet = $Workbook.Worksheets.item(1)
    
    # Zeile 1 auslesen bis die erste leere Zelle kommt 
    # beginnen bei Spalte
    $Spalte = 2
    do {
    
    	# Spalte A auslesen bis die erste leere Zelle kommt
    	# beginnen bei Zeile
    	$Zeile = 2
    	do {
    		
    		# Gruppe aus Spalte A auslesen in der Aktuellen Zeile
    		$SpalteA =  $Worksheet.Cells.Item($Zeile,1).Value()
    		
    		# User auslesen aus Zeile 1  und der Aktuellen Spalte
    		$Zeile1 = $Worksheet.Cells.Item(1,$Spalte).Value()
    		
    		# Matrix Zelle auslesen mit Aktueller Zeile und Spalte
    		$MatrixZelle = $Worksheet.Cells.Item($Zeile,$Spalte).Value()
    
    		# ergebnis Anzeigen
    		"User $Zeile1 in Gruppe $SpalteA  $MatrixZelle"
    
    		# vorrücken in die nächste Zeile
    		$Zeile++
    
    	# ende der DO Schleife zum auslesen der Spalte A	
    	} until ($($Worksheet.Cells.Item($Zeile,1).Value()) -eq $null)
    
    # vorrücken in die nächste Spalte
    $Spalte++
    
    # ende der DO Schleife zum auslesen der Zeile 1
    } until ($($Worksheet.Cells.Item(1,$Spalte).Value()) -eq $null)



    Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
    German ? Come to German PowerShell Forum!

    • Bearbeitet Peter Kriegel Dienstag, 17. September 2013 14:29 sdfsadas
    • Als Antwort markiert Florian Reck Mittwoch, 18. September 2013 05:54
    Dienstag, 17. September 2013 14:26
  • Hallo Peter,

    1000end Dank, das klappt perfekt! Ich sehe schon, ich habe noch viel zu lernen :-)...

    Grüsse

    Florian


    Schaue auf niemanden herab, es sei denn, du willst ihm aufhelfen...

    Mittwoch, 18. September 2013 05:55