JensGoro
-
Gesamte Inhalte
3 -
Registriert seit
-
Letzter Besuch
Beiträge erstellt von JensGoro
-
-
vor 11 Stunden schrieb MurdocX:
Hallo JensGoro,
willkommen an/im Board.
$objListBox wurde vorher nicht definiert. Es existiert also nicht.
Das ist der Grund warum das Object oben nicht existiert, denn es kommt erst ab Zeile 53, aufgerufen wird es schon in Zeile 28. Das funktioniert so nicht. Das muss < Zeile 27.
- Vermeide Abkürzungen, wie z.B. "sort". Es sollte heißen Sort-Object. Das macht den Code lesbarer und weniger fehleranfällig.
- $switch - ist eine Iterationsvariable, die Powershell ohne wenn und aber überschreiben kann. Verwende einen treffenderen Namen.
- $printername - ist eine Variable die gesetzt, aber nie definiert wird. Sie ist also immer $null. Sie überschreibt sogar immer das Attribute extensionAttribute13 im AD.
- $x - ist eine Variable die zwar in der Zeile 36 definiert, aber nie genutzt wird. Alles was also in der ListBox ausgewählt wird, geht ins Nirvana. Das übrigens 2x.
Das Skript sollte dringend überarbeitet werden.
Vielen lieben dank erst einmal an alle, es ist korrekt, dass das Script nicht von mir stammt, ich habe es auch nur übernommen und habe nur eingeschränkt erfahrung mit Scripten.
Könnte mir jemand den Code ggf. überarbeiten? Ich weiß, es klingt frech, aber ich bin etwas hilflos :(
-
Hi zusammen,
wir haben ein Script zum auswählen eines Standard Drucker, welches leider mittlerweile einen Fehler auswirft.
Fehler:
<# Automatisierung Export. Werte aus der Active Directory in die config_file exportieren. Syntax config_file [username];[printername] #> ### Parameter ### $config_file = "\\SERVER\NETLOGON\default_printers\default_printer.txt" $config_file_temp = "\\SERVER\NETLOGON\default_printers\default_printer_temp.txt" $ADAttribut = "extensionAttribute13" ### Code ### import-module ActiveDirectory $t = ';' $Users = get-aduser -Filter * foreach($User in $Users) { $attribut = Get-ADUser $User.SamAccountName -Properties * | select -Property $ADAttribut $username = $User.SamAccountName $parameter = $username + $t + $attribut $parameter = $parameter.TrimEnd('}') $parameter = $parameter -replace ‘@{extensionAttribute13=’,'' If(!$parameter.Split(";")[1]) { $parameter = "" } else { $parameter | Out-File -FilePath $config_file_temp -Append } } Copy-Item $config_file_temp $config_file Remove-Item $config_file_temp Exit
Anbei der Code:
<# GUI für die Automatisierung des Standarddruckers #> ### Parameter ### $printer_list_file = "\\SERVER\NETLOGON\default_printers\printers.txt" $dir = "\\SERVER\NETLOGON\default_printers\" ### LOAD ### [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") import-module ActiveDirectory $printers = Get-Content -Path $printer_list_file -Encoding UTF8 ### CODE ### #------------------------------------------------------------------------------------------- # Fenster 1 $objForm = New-Object System.Windows.Forms.Form $objForm.Text = "Standarddrucker setzten" $objForm.Size = New-Object System.Drawing.Size(300,600) $objForm.StartPosition = "CenterScreen" $objForm.KeyPreview = $True $objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$x=$objListBox.SelectedItem;$objForm.Close()}}) $objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$objForm.Close()}}) $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Size(60,540) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = "OK" $OKButton.Add_Click({$username=$objListBox.SelectedItem;$objForm.Close()}) $objForm.Controls.Add($OKButton) $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.Location = New-Object System.Drawing.Size(150,540) $CancelButton.Size = New-Object System.Drawing.Size(75,23) $CancelButton.Text = "Abbrechen" $CancelButton.Add_Click({$objForm.Close() $username = ""}) $objForm.Controls.Add($CancelButton) $objLabel = New-Object System.Windows.Forms.Label $objLabel.Location = New-Object System.Drawing.Size(10,20) $objLabel.Size = New-Object System.Drawing.Size(280,20) $objLabel.Text = "Bitte einen Benutzer auswählen:" $objForm.Controls.Add($objLabel) $objListBox = New-Object System.Windows.Forms.ListBox $objListBox.Location = New-Object System.Drawing.Size(10,40) $objListBox.Size = New-Object System.Drawing.Size(260,20) $objListBox.Height = 480 # Fenster 1 CODE $Users = get-aduser -Filter * foreach($User in ($Users|sort)) { $username_blank = $User.Name $username_logon = $User.SamAccountName [void] $objListBox.Items.Add($username_blank + " " +"(" + $username_logon + ")") } $objForm.Controls.Add($objListBox) $objForm.Topmost = $True $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog() #------------------------------------------------------------------------------------------- # Fenster 2 $objForm = New-Object System.Windows.Forms.Form $objForm.Text = "Standarddrucker setzten" $objForm.Size = New-Object System.Drawing.Size(300,600) $objForm.StartPosition = "CenterScreen" $objForm.KeyPreview = $True $objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$x=$objListBox.SelectedItem;$objForm.Close()}}) $objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$objForm.Close()}}) $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Size(60,540) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = "OK" $OKButton.Add_Click({$printername=$objListBox.SelectedItem;$objForm.Close()}) $objForm.Controls.Add($OKButton) $CancelButton = New-Object System.Windows.Forms.Button $CancelButton.Location = New-Object System.Drawing.Size(150,540) $CancelButton.Size = New-Object System.Drawing.Size(75,23) $CancelButton.Text = "Abbrechen" $CancelButton.Add_Click({$objForm.Close() $printername = ""}) $objForm.Controls.Add($CancelButton) $objLabel = New-Object System.Windows.Forms.Label $objLabel.Location = New-Object System.Drawing.Size(10,20) $objLabel.Size = New-Object System.Drawing.Size(280,20) $objLabel.Text = "Bitte einen Drucker auswählen:" $objForm.Controls.Add($objLabel) $objListBox = New-Object System.Windows.Forms.ListBox $objListBox.Location = New-Object System.Drawing.Size(10,40) $objListBox.Size = New-Object System.Drawing.Size(260,20) $objListBox.Height = 480 # Fenster 2 CODE [void] $objListBox.Items.Add("< Löschen >") $Users = get-aduser -Filter * foreach($printer in ($printers|sort)) { [void] $objListBox.Items.Add($printer) } $objForm.Controls.Add($objListBox) $objForm.Topmost = $True $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog() #------------------------------------------------------------------------------------------- # CODE $username = $username.TrimEnd(')') $username_blank = $username.Split("(")[0] $username_blank = $username_blank.Trim() $username = $username.Split("(")[1] If($username -and $printername) { $switch = 1 } If($printername -eq "< Löschen >") { $switch = 2 } If(!$username -or !$printername) { $switch = 3 } switch ($switch) { 1 { Set-ADUser $username –replace @{extensionAttribute13=$printername} $dir = $dir + "default_printer_Export.ps1" & $dir $ausgabe = "Der Standardrucker des Benutzers $username_blank wurde auf den Drucker `"$printername`" geändert." } 2 { Set-ADUser $username –replace @{extensionAttribute13="0"} Set-ADUser $username –remove @{extensionAttribute13="0"} $dir = $dir + "default_printer_Export.ps1" & $dir $ausgabe = "Der Standardrucker des Benutzers $username_blank wurde gelöscht." } 3 { $ausgabe = "Kein Wert angegeben" } default { $ausgabe = "Fehler" } } #------------------------------------------------------------------------------------------- # Fenster 3 $objForm = New-Object System.Windows.Forms.Form $objForm.Text = "Standarddrucker setzten" $objForm.Size = New-Object System.Drawing.Size(300,160) $objForm.StartPosition = "CenterScreen" $objForm.KeyPreview = $True $objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$x=$objListBox.SelectedItem;$objForm.Close()}}) $objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$objForm.Close()}}) $OKButton = New-Object System.Windows.Forms.Button $OKButton.Location = New-Object System.Drawing.Size(108,100) $OKButton.Size = New-Object System.Drawing.Size(75,23) $OKButton.Text = "OK" $OKButton.Add_Click({$objForm.Close()}) $objForm.Controls.Add($OKButton) $objLabel = New-Object System.Windows.Forms.Label $objLabel.Location = New-Object System.Drawing.Size(10,20) $objLabel.Size = New-Object System.Drawing.Size(280,60) $objLabel.Text = $ausgabe $objForm.Controls.Add($objLabel) $objForm.Topmost = $True $objForm.Add_Shown({$objForm.Activate()}) [void] $objForm.ShowDialog() Exit
Kann mir jemand helfen, den Fehler zu fixen? :)
Automatisierung Standarddruckers mit Powershell -> keine Methode für Ausdruck aufzurufen, der NULL ist
in Windows Forum — Scripting
Geschrieben
Vielleicht frage ich anders ;) Hatjemand ein Script, welches ich nutzen kann, um AD-Usern einen Standard Drucker zu setzen? :)
Würde mich sehr freuen.