Hallo,
ich bekomme bei meinem Script folgende Meldung:
Cmdlet Set-ADUser an der Befehlspiplinepostion 1 Geben Sie Werte für die folgenden Parameter an: Identity:
Script:
# startet das Skript im STA-Mode neu, wenn dies erforderlich sein sollte.
If ($host.Runspace.ApartmentState -ne 'STA') {
write-host "Script is not running in STA mode. Switching "
$Script = $MyInvocation.MyCommand.Definition
Start-Process powershell.exe -ArgumentList "-sta $Script"
Exit
}
# Grundform
Function Form {
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") | Out-Null
[Reflection.Assembly]::LoadWithPartialName("System.Drawing") | Out-Null
[Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms.VisualStyles") | Out-Null
$ProgressForm = New-Object System.Windows.Forms.Form
$ProgressForm.Text = 'Bitte warten...'
$ProgressForm.Width = 350
$ProgressForm.Height = 144
$ProgressForm.MaximizeBox = $False
$ProgressForm.MinimizeBox = $False
$ProgressForm.ControlBox = $False
$ProgressForm.ShowIcon = $False
$ProgressForm.StartPosition = 1
$ProgressForm.Visible = $False
$ProgressForm.FormBorderStyle = "FixedDialog"
#$ProgressForm.WindowState = "Normal"
$InText = New-Object System.Windows.Forms.Label
$InText.Text = 'Die Anfrage wird bearbeitet...'
$InText.Location = '18,26'
$InText.Size = New-Object System.Drawing.Size(330,18)
$progressBar1 = New-Object System.Windows.Forms.ProgressBar
$ProgressBar1.Name = 'LoadingBar'
$ProgressBar1.Style = "Marquee"
$ProgressBar1.Location = "17,61"
$ProgressBar1.Size = "300,18"
$ProgressBar1.MarqueeAnimationSpeed = 40
$ProgressForm.Controls.Add($InText)
$ProgressForm.Controls.Add($ProgressBar1)
$sharedData.Form = $ProgressForm # Speichern der Form in die Hashtable
[System.Windows.Forms.Application]::EnableVisualStyles()
[System.Windows.Forms.Application]::Run($ProgressForm)
#[System.Windows.Forms.Application]::DoEvents()
}
# Hashtable für Datenaustausch zwischen den Threads
$sharedData = [HashTable]::Synchronized(@{})
$sharedData.Form = $Null
# Thread eigener Runspace mit der Hashtable
$newRunspace = [RunSpaceFactory]::CreateRunspace()
$newRunspace.ApartmentState = "STA"
$newRunspace.ThreadOptions = "ReuseThread"
$newRunspace.Open()
$newRunspace.SessionStateProxy.setVariable("sharedData", $sharedData)
# Thread eigene asynchrone Powershell
$PS = [PowerShell]::Create()
$PS.Runspace = $newRunspace
$PS.AddScript($Function:Form)
$AsyncResult = $PS.BeginInvoke()
# --------------------------------------------------------
# Eigentliches Script
#AD-Module importieren
Import-Module ActiveDirectory
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null
$dialog = New-Object System.Windows.Forms.OpenFileDialog
$dialog = New-Object System.Windows.Forms.OpenFileDialog
$dialog.DefaultExt = '.csv'
$dialog.Filter = 'CSV Datei|*.csv|All Files|*.*'
$dialog.FilterIndex = 0
$dialog.InitialDirectory = $home
$dialog.Multiselect = $false
$dialog.RestoreDirectory = $true
$dialog.Title = "Select a csv file"
$dialog.ValidateNames = $true
$dialog.ShowDialog()
$dialog.FileName
$script:ErrorActionPreference = "silentlyContinue"
#Eingabeaufforderung
#$Pfad = Read-Host "Bitte Pfad zur .CSV Datei angeben
#Beispiel: C:\users\Administrator\desktop\powershell\Export_cherwell_bearbeitet.csv"
#CSV-Datei importieren
$DatenSaetze = Import-Csv $dialog.FileName -UseCulture -Encoding UTF8
#Jeden Datensatz der CSV-Datei durchlaufen
ForEach ($DatenSatz in $DatenSaetze){
# Set-AdUser-Aufruf mit dem SamAccountName des derzeitigen CSV-Eintrags initieren.
$Kommando = "Set-AdUser $($Datensatz.samAccountName)"
# Für jeden CSV-Eintrag die entsprechenden Attribute durchlaufen
ForEach ($Attribut in (Get-Member -InputObject $DatenSatz -MemberType NoteProperty)){
$Wert = $DatenSatz.($Attribut.Name)
#Überprüfen, ob Wert nicht leer ist und nicht den SamAccountName enthält
if ($Wert -and ($Wert.Name -ne 'samAccountName')){
# Zuvor initierten Aufruf von Set-AdUser um entsprechende Werte erweitern
$Kommando+= " -$($Attribut.Name) '$Wert'"
}
}
#Inhalt von $Kommando mittels Invoke-Expression ausführen
Invoke-Expression $Kommando
}
# --------------------------------------------------------
# Form schließen
If($sharedData.Form) {
$sharedData.Form.close()
}
# neue Powershell beenden und Objekt entfernen
$PS.Endinvoke($AsyncResult)
$PS.dispose().CSV Datei
givenname;department;surname;officephone;samaccountname Frank;AU;Mustermann;+49 40 ***;Mustermann-F Claus;MaWI / extern / PPS;Lustig;+49 ** ;Wilkens-PPS Hans;BR;Muster - Betriebsrat;+49 40**;BR-Muster Peter;BR;Mann - Betriebsrat;+49 40 ***;BR-Mann Christian;BR;Meier - Betriebsrat;+49 40 ***;BR-Meier
Die * bei der Telefonnummer sind nur Lückenfüller.