Benutzer mit den meisten Antworten
Excel / Powershell Zugriff auf Matrix

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...
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
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! -
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...
-
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