2017-02-01 1 views
1

Ich habe ein Skript, um Computer in meiner Domäne umzubenennen. Jetzt versuche ich meine erste GUI zu erstellen und dieses Skript zu integrieren. Ich habe eine GUI mit Visual Studio WPF-Projekt erstellt. Das Ziel ist, die Möglichkeit zu haben, Computer und ihren neuen Namen manuell über zwei Textfelder einzugeben oder um eine CSV-Datei importieren zu können. Beide Optionen sollten die Listview füllen. Klicken Sie dann auf Ausführen, um alle Computer in der Listenansicht umzubenennen. Ich suche gerade nach Hilfe für die Import-Button-Funktion. Wenn es einen anderen Weg gibt, den ich machen sollte, bin ich definitiv offen für Vorschläge.PowerShell GUI CSV-Import in ListView

aktuellen Code

#LoadForm 

./LoadDialog.ps1 -XamlPath 'C:\Forms\ReNamer.xaml' 

#EVENT Handler 

$oldname = $CurrentNameBox 
$newName = $NewNameBox 
##$renameBtn.Add_Click({$Form.Close()}) 
$csvPath = $csvBox 
$csvBtn.Add_Click({GetCompList}) 

#Launch the window 

$xamGUI.ShowDialog() | out-null 


    #Csv import button 
    Function GetCompList{ 
    Write-Host "Importing Computers from CSV file" 
    $csvfile = "C:\Sysinternals\rename.csv" 
    Import-Csv $csvfile | foreach { 
    $oldName = $_.OldName; 
    $newName = $_.NewName; 
    } 
    } 

    Function RenameComputers{ 
    Write-Host "Renaming computer from: $o to: $n" 
    netdom renamecomputer $o /newName:$n /uD:sdirc\clarkj8 /passwordD:$p /force /reboot 
    } 

Listview XAML

<ListView Name="listView" HorizontalAlignment="Left" Height="194" Margin="10,101,0,0" VerticalAlignment="Top" Width="350" Grid.Column="1"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Old Computer Name" Width="175"/> 
        <GridViewColumn Header="New Computer Name" Width="175"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 

GUI enter image description here

Antwort

1

ich stattdessen ein Datagrid verwenden würde und verwenden Sie Code ähnlich wie diese:

$csv = import-csv C:\csv.csv | Select-Object @{Name=‘OldName‘;Expression={$_.OldName}},` 
              @{Name=‘NewName’;Expression={$_.NewName}} 

$csv | % { $datagrid.AddChild($_) } 

Ich habe einen ähnlichen Code in einem PowerShell-GUI-Projekt verwendet, das ich verwendet habe. Csv müsste Header wie OldName, NewName haben.

EDIT: Und Ihr Header-Name in der Datagrid hat die gleichen wie in $ csv

+0

OK ich, dass irgendwie arbeiten musste sein. Wenn ich auf die Schaltfläche "Importieren" klicke, wird jetzt die korrekte Anzahl von Zeilen geladen. aber sie sind leer und soweit ich das beurteilen kann, wird keine zweite Spalte angezeigt. Irgendwelche Ideen? –

+0

Ich habe vergessen zu erwähnen, dass Sie Bindungen zu den Spalten in der XAML hinzufügen müssen. Aus irgendeinem Grund kann ich diese Nachricht nicht formatieren, aber überprüfe, ob die Spalten den gleichen Namen wie in $ csv haben . Die Bindungen sollten die einzige andere Sache sein, die du brauchst. – Goldn123