Quantcast
Channel: Windows PowerShell Forum
Viewing all 2314 articles
Browse latest View live

stderr Ausgabe aus python script (oder cmd) abfangen oder umleiten

$
0
0

Hallo,
ich rufe aus powershell ein python script auf.

$result=python C:\py\check.py -t tempfile

Das funktioniert wie gewünscht, die Ausgabe landet in $result und ich kann sie von dort aus weiter verwerten.

Probleme gibt es wenn das python script eine Ausgabe nach stderr macht
z.B.:
sys.stderr.write('Error...\r')

Dann kommt es zu einem Fehler in powershell:
python.exe : Error...
At C:\PS\consolidate.ps1:298 char:33
+                         $result=python C:\py\check.py -t tem ...
+                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (Error...:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
Error...

In einer batch Datei konnte man den Fehlerkanal einfach umleiten.
check.py -t tempfile 2>nul

In Powershell geht das nicht.
Redirection to 'nul' failed: FileStream will not open Win32 devices such as disk partitions and tape drives.

Nun kann ich zwar den Fehlerkanal nach stdout umleiten mit 2>&1, das klappt auch in Powershell, verhindert aber nicht den Fehler und ist auch nicht was ich möchte.
Ich möchte entweder den Fehlerkanal nach nul schreiben oder in eine separate Variable.

Aktuell helfe ich mir, im python script die entsprechende Zeile einfach auszukommentieren.
Ich suche aber nach einer Lösung die im Powershell die saubere Übernahme von stdout und stderr ermöglicht.

Gruß

Michael



Problem mit OlePrn.OleSNMP Get() Methode

$
0
0

Guten Tag!

Ich versuche gerade einen Script/Funktion zu erstellen die für eine Liste der bekannten Ip Adressen eine SNMP Abfrage macht 

und die Ergebnisse in einer CSV Datei abspeichert. Dabei bin ich auf ein kleines Problem gestoßen, und zwar:

############################################################################

$SNMP = new-object -ComObject olePrn.OleSNMP
$snmp.open("128.X.XX.XX","public",3,3000)

$snmp.Get('.1.3.6.1.2.1.2.2.1.2.1')  #Als Test Abfrage interfaces.ifTable.ifEntry.ifDescr (Beschreibung des ersten Interfaces)

eth0                                                #Der Drucker liefert "eth0" als Antwort. Klappt !

############################################################################

$snmp.GetTree(".1.3.6.1.2.1.2.2.1") #SNMP Walk liefert alles, außer MAC  (interfaces.ifTable.ifEntry.ifPhysAddress.1)!!!!
interfaces.ifTable.ifEntry.ifIndex.1
interfaces.ifTable.ifEntry.ifDescr.1
interfaces.ifTable.ifEntry.ifType.1
interfaces.ifTable.ifEntry.ifMtu.1
interfaces.ifTable.ifEntry.ifSpeed.1
interfaces.ifTable.ifEntry.ifPhysAddress.1
interfaces.ifTable.ifEntry.ifAdminStatus.1
interfaces.ifTable.ifEntry.ifOperStatus.1
interfaces.ifTable.ifEntry.ifLastChange.1
interfaces.ifTable.ifEntry.ifInOctets.1
interfaces.ifTable.ifEntry.ifInUcastPkts.1
interfaces.ifTable.ifEntry.ifInNUcastPkts.1
interfaces.ifTable.ifEntry.ifInDiscards.1
interfaces.ifTable.ifEntry.ifInErrors.1
interfaces.ifTable.ifEntry.ifInUnknownProtos.1
interfaces.ifTable.ifEntry.ifOutOctets.1
interfaces.ifTable.ifEntry.ifOutUcastPkts.1
interfaces.ifTable.ifEntry.ifOutNUcastPkts.1
interfaces.ifTable.ifEntry.ifOutDiscards.1
interfaces.ifTable.ifEntry.ifOutErrors.1
interfaces.ifTable.ifEntry.ifOutQLen.1
interfaces.ifTable.ifEntry.ifSpecific.1
1
eth0
6
1500
100000000

1
1
0
-91572112
55481485
0
0
0
0
94627764
307234
0
0
0
0
.0.0

############################################################################

PS C:\> $snmp.Get('.1.3.6.1.2.1.2.2.1.6.1')  #Nochmal explizit mit Get()


PS C:\>                                                        #Liefert auch kein wert


############################################################################

Ein externer Programm lieferte mir an der Stelle folgendes:

OID:.1.3.6.1.2.1.2.2.1.6.1

Value [OctetString]:00-C0-EE-94-0E-AF

Raw Value [OctetString]:HEX: 00 C0 EE 94 0E AF

############################################################################

Nochmal mit Get() Methode:

PS C:\> $snmp.Get('.1.3.6.1.2.1.2.2.1.6.1').Length
0

PS C:\> 

Hat jemand eine Idee ?

Grüße!

Aleksander Szpedt




AD - Gruppenabfrage

$
0
0

Hallo liebe Powershell Gemeinde,

ich beschäftige mich seit einiger Zeit mit PowerShell. Bin aber noch absoluter Anfänger. Somit hoffe ich auf eure Hilfe und Unterstützung. Mein Proble ist folgendes:

Ich soll zusammen stellen, welcher Anwender ist in welchen AD Gruppen. Es sollen alle AD Gruppen erfasst werden. Das Ergebniss soll dann in eine .csv oder .xls Datei geschrieben werden. Auf diesem Wege soll überprüft werden ob der Anwender xy zuviele Rechte hat. Diese Überprüfung soll dann z.B alle 3 -6 Monate erfolgen.

Ich habe dies bereits für eine einzelen Gruppe gemacht und das Ergebniss in eine .txt Datei geschrieben.

Get-ADGroupMember "....." | Get-ADUser | Where-Object { $_.Enabled -eq 'True' } |ft name > c:\Ausgabe\****.txt

Das habe ich auch versucht aber ich weiss nicht wie ich das aufbereiten soll?

Import-Module ActiveDirectory
get-adgroup -filter * -Properties member

Sind die Ansätze den schon so weit gut oder bin ich auf dem total falschen Weg? Ich hoffe ihr könnt mir helfen.

Viele Grüße

Michael


Bildschirm sperren

$
0
0

Hallo,

ich würde gerne ein Skript schreiben, dass ich in eine Installationsroutine mit einbinde, sodass während der Installation keine Maus+Tastatureingaben möglich sind.

Dazu habe ich nun folgendes bereits:

Add-Type -AssemblyName PresentationFramework    
        function Lock-Screen([ScriptBlock] $Payload={Start-Sleep -Seconds 5}, $Title='Busy, go away.'){
    try
    {
      $window = New-Object Windows.Window
      $label = New-Object Windows.Controls.Label

      $label.Content = $Title
      $label.FontSize = 50
      $label.FontFamily = 'Consolas'
      $label.Background = 'Transparent'
      $label.Foreground = 'Red'
      $label.HorizontalAlignment = 'Center'
      $label.VerticalAlignment = 'Center'

      $Window.AllowsTransparency = $True
      $Window.Opacity = .7
      $window.WindowStyle = 'None'
      $window.Content = $label
      $window.Left = $window.Top = 0
      $window.WindowState = 'Maximized'
      $window.Topmost = $true

      $null = $window.Show()
      Invoke-Command -ScriptBlock $Payload
    }
   finally { $window.Close() }
}
        
        $Job =
        {
        Execute-MSI -Action Install -Path 'Test.msi' -Parameters '/QN'
        }
        
        Lock-Screen -Payload $job -Title 'Programm wird installiert'

Nun ist das Problem, dass der Bildschirm zwar grau wird und die Nachricht "Programm wird installiert" angezeigt wird, aber wenn ich nur einen Doppelklick in irgendeine beliebige Stelle drücke, hängt sich das Skript auf. Nun ist meine Frage, ob es ein Skript gibt, was den Bildschirm nicht grau macht, aber zumindest Maus+Tastatur definitiv sperrt.

Gruß,

excQ

Ordner mit square brackets (eckige klammern) umbenennen

$
0
0

Hallo @all,

nach stundenlanger Suche, frage ich jetzt doch einmal hier nach. Gibt es eine Möglichkeit mit Powershell Ordner in eckigen Klammern umzubenennen?

Beispiel:
C:\[test] zu C:\[test_neu]

Rename-Item "C:\[test]" "C:\[test_neu]"
Das funtioniert nicht weil der Dateipfad nicht gefunden wurde. Auch die folgenden Möglichkeiten funktionieren nicht.

Rename-Item "C:\`[test`]" "C:\`[test_neu`]"
Rename-Item "C:\``[test``]" "C:\``[test_neu``]"

PS. Es geht generell um die Verwendung von Verzeichnissen in eckigen Klammern. Diese werden von Powershell (Aktuelle Version 4.0) nicht erkannt.

Weiß irgendjemand wie das zu lösen ist?
Vielen Dank für die Unterstützung.


PowerShell & square brackets (eckige klammern) in Pfaden

$
0
0

Hallo @all,

nach stundenlanger Suche, frage ich jetzt doch einmal hier nach. Gibt es eine Möglichkeit mit Powershell Ordner in eckigen Klammern umzubenennen?

Beispiel:
C:\[test] zu C:\[test_neu]

Rename-Item "C:\[test]" "C:\[test_neu]"
Das funtioniert nicht weil der Dateipfad nicht gefunden wurde. Auch die folgenden Möglichkeiten funktionieren nicht.

Rename-Item "C:\`[test`]" "C:\`[test_neu`]"
Rename-Item "C:\``[test``]" "C:\``[test_neu``]"

PS. Es geht generell um die Verwendung von Verzeichnissen in eckigen Klammern. Diese werden von Powershell (Aktuelle Version 4.0) nicht erkannt.

Weiß irgendjemand wie das zu lösen ist?
Vielen Dank für die Unterstützung.



FolderBrowserDialog: SelectedPath-Wert nicht befüllen?

$
0
0

Guten Tag,

zuerst würde ich euch gerne einen Teilcode zeigen:

Function dialog-Folder(){
    $FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog -Property @{
        Description = "Please select the folder"
        RootFolder  = "Desktop"
}
    [void]$FolderBrowser.ShowDialog()
    $FolderBrowser.SelectedPath}

$folderpath = dialog-Folder

If ($folderpath -eq $NULL){
    [System.Windows.Forms.MessageBox]::Show("No folder chosen!", "Error", 0, [System.Windows.Forms.MessageBoxIcon]::Error)
    exit
}
Else {
    Code
}

Problem ist bei der If-Abfrage springt der Code immer zum Else-Block, weil die Variable $folderpath immer den Pfad zum Desktop beinhaltet, heißt die Variable ist nie leer, obwohl ich beim Dialogfenster auf Cancel, oder X klicke.

Wie kriege ich es hin, dass $folderpath leer ist, wenn ich nichts im Dialogfenster auswähle??

Vielen Dank im voraus.

MfG

Einzelne PS Scripts zulassen (Set-ExecutionPolicy)

$
0
0

Hallo an alle,

gibt es die Möglichkeit einzelne Powershell Scripts zuzlassen?
Mit dem Befehl "Set-ExecutionPolicy" gibt es ja lediglich die Parameter: (Restricted, AllSigned, RemoteSigned, Bypass, Dnrestricted, Default, Undefined).

Kann man auch einstellen, dass alles Scripts von einem definierten Pfad bzw. mit einem defiiertem Namen erlaubt sind?

Danke.


INI-File Filtern und Modifizieren

$
0
0

Ich versuche gerade ein Ini-Files mit Powershell zu parsen.

Problemstellung:

In diesem Loginscript.ini file mit (hunderten von Zeilen) werden aufgrund von gleichen Gruppenzugehörigkeiten eines Users in den verschiedenen Sektionen SASIMAP und SASOLAP (hier im Beispiel wäre eine solche aufgeführt, nämlich UserGroups=Domäne\gl_w_SASIMAP) die gleichen Skripte mehrfach ausgeführt. Dies führt zu langen Logonzeiten.

Ziel ist es, mit Powershell durch Löschen der ganzen überzähligen Sektionen im Ini-File zu bewirken, dass jedes VB-Script für jede UserGroup nur einmal ausgeführt wird. 

Wie im Beispiel ersichtlich sind die rot markierten gleichen Mehrfacheinträge (die beliebige Namen und Stringlängen haben könnten), auf Gleichheit herauszufiltern.

Sind Übereinstimmungen von scriptname.vbs in verschiedenen Sektionen gefunden und gibt es gleichzeitig noch die Übereinstimmung der UserGroup=Domain\Usergroup, dann sollen alle überzähligen Sektionen gelöscht werden, so dass  jedes VB-Script für jede UserGroup nur einmal ausgeführt wird.

Um zu verhindern, dass ein Aufruf von VBScripten welche x-beliebig heissen können, ( Scriptname01vbs bis ScriptnameN.vbs) unnötig doppelt oder mehrfach erfolgt, möchte

Unter Mehrfacheinträgen verstehe ich Folgendes und möchte das an dem Beispiel erklären, an dem ich Treffer für Mehrfacheinträge in verschiedenen Sektionen habe.

In den Sektionen, [SASIMP] und [SASOLAP]gibt es unter Arguments einen Pfad in dem das gleiche VBSscript (im Beispiel scriptname01) aufgerufen wird, falls der 2. Parameter, nämlich der Eintrag unter UserGroups=Domäne\globale_Security_Group ebenfalls gleich lautet handelt es sich um einen Treffer (Mehrfachaufruf des selben *.vbs aus mehreren Sektionen)

Im Beispiel wird das aufgerufene VB-Script scriptname01.vbs genannt wird. Werden 2 gleiche Scriptnamen innerhalb mehrerer Sektionen im ini-file gefunden und sind zusätzlich noch die UserGroups=Domäne\gl_w_SASIMAP in diesen Sectionen ebenfalls gleich, dann würde die Suche einen Treffer haben und alle bis auf eine dieser Sectionen sollten dann gelöscht werden.

Ergebnis:

Das Löschen der ganzen überzähligen Sektionen bewirken, dass jedes VB-Script für jede UserGroup nur einmal ausgeführt wird.

Frage: Kann dies überhaupt in Powershell realisiert werden ?Falls ja. -Wie kann dies über ein Powershell - Skript realisiert werden ?

Fall Beispiel eines Treffers aus dem INI-File:

[SASIMAP]
FileName=C:\Program Files (x86)\VBScript\CScript.exe
Arguments=”C:\Windows\Application Compatibility Scripts\Logon\scriptname01.vbs” //B //NoLogo //T:60
UserGroups=Domäne\gl_w_SASIMAP
Description=SASIMAP
Wait=0
WindowStyle=1
[SASOLAP]
FileName=C:\Program Files (x86)\VBScript\CScript.exe
Arguments=”C:\Windows\Application Compatibility Scripts\Logon\scriptname01.vbs” //B //NoLogo //T:60
UserGroups=Domäne\gl_w_SASIMAP
Description=SASOLAP
Wait=0
WindowStyle=1

(siehe Ini-File Bespiel)

Bitte kann mir hier jemand in der Vorgehensweise, dies in Powershell zu programmieren, weiterhelfen.
Einlesen der Ini-Files in verschiedene Arrays und Vergleich der Einträge auf identische Scriptnamen und identische UserGroups, wäre meine erste Idee. Leider bin ich noch nicht soweit das ich das selber umsetzen könnte.

Gottfried Bregenzer

INI-File Filtern und Modifizieren

$
0
0


Anbei noch das Beispiel mit dem Treffer beim Suchen nach gleichen Scriptnamen *.vbs unter Arguments, wenn die UserGroup ebenfalls identisch ist und in verschiedenen Sektionen des Inifiles vorkommen. Leider konnte ich das Picture nicht hochladen, da mein Account seit 2 Wochen existiert aber leider noch nicht verifiziert worden ist.

mfg

Backslash und Inhalt einer Variable in neue Variable Ergebnis in Anführungszeichen

$
0
0

Hallo,

ich versuche in Power Shell folgendes Ergebnis zu erreichen "\Erster Fehler" (Also in Anführungszeichen)

$BS ="\"
$Tx="Erster Fehler"

So geht es nicht:

$Txt = """$BS+$Tx"""
$Txt = """\"+$Tx"""

Hintergrund: $Tx wird im Scipt mit und ohne BS benötigt. 

Wer Kann mir helfen

Vielen Dank

Gute Bücher zu PoweSchell

$
0
0

Hallo,

ich möchte Literatur zur PS Programmierung kaufen.
Könnt ihr mir Vorschläge machen?
Es soll nicht zu kompliziert sein aber auch nicht für "unbedarfte".
Und gibt es erfolgreiche Lernmethoden die zu empfehlen sind?

Vielen Dank

Externes Programm einbinden

$
0
0

Hallo,

ich habe ein Powershell-Skript geschrieben, wo verschiedene Parameter ablaufen.

Nun möchte ich innerhalb des Skriptes auf ein Tool (dieses ist auf den Clients installiert) zugreifen. Dabei soll das Skript das Tool starten, einen Paramter ausführen (Tastenkombination innerhalb des Tools damit eine Aktion startet) und nach einer bestimmten Zeit (im Skript geht es um eine Installationsroutine) soll sich das Tool wieder schließen und der Paramter soll zurückgenommen werden.

Wie kann ich dies in PS verwirklichen?

Gruß

excQ

Kopieren von Berechtigungsgruppen-Mitgliedern von AD zu AD

$
0
0

Hallo zusammen

Wir migrieren gerade unser Active Directory in das Konzern-AD.

Während der momentanen Phase fahren wir doppelgleisig und dadurch kam folgendes Problem auf:

Wir müssen alle Berechtigungsgruppen, oder besser gesagt deren Mitglieder, aller Ordner eines Netzlaufwerks auslesen und in das Konzern-AD kopieren. Die Gruppen und die Useraccounts im Konzern-AD unterliegen einer anderen Namenskonvention als bei uns. Die Gruppen existieren bereits im Konzern-AD, allerdings unter anderen Namen; und die Useraccounts in den Gruppen existieren ebenfalls unter einem anderen Anzeigenamen.

In weiterer Folge wäre es noch toll, wenn wir unsere Gruppen durch die anders benannten Gruppen des Konzern-AD ersetzen könnten.

Gibt es hierfür eine möglichst simple Lösung unter Verwendung von Powershell ? Oder werden wir womöglich glücklicher wenn wir einen Praktikanten mit dem manuellen übertragen der Mitglieder beauftragen ? ;-)

Vielen Dank im voraus !

Send-Mailmessage mit Strato Server (für den Smtp Server ist eine sichere Verbindung erforderlich)

$
0
0

Hallo,

nachdem Tag 2 anbricht und ich immer noch mit dem gleichen Fehler kämpfe -> help

ich will "einfach" eine Mail über Powershell senden - nutze PS seit gestern :)

das hab ich bisher gefunden:

(1) $pw = Get-Content .\MailPW.txt | ConvertTo-SecureString
(2) $cred = New-Object System.Management.Automation.PSCredential "user@meinserver.de", $pw
(3) Send-MailMessage  -Credential $cred -to "will@mehrmails.de" -from "user@meinserver.de" -Subject "verzweifelt" -SmtpServer "smtp.strato.de"



Die Passwortdatei hab ich mit

(Get-Credential).password | ConvertFrom-SecureString > MailPW.txt

erzeugt, denke mal hier liegt das Problem - es kommt ein Fenster in dem ich der Mail-User + Passwort eingebe => wieso den Mail-User? den übergebe ich doch in Zeile 2 nochmal.

Bekomme aber jedesmal die Meldung damit die sichere Verbindung nicht klappt. Gesendet werden soll die Mail von unserem Windows7 Server mit einer Info damit die Sicherung geklappt hat.

Grüße

gupy2000


Remove Item löscht Verzeichnis nicht

$
0
0

Hallo,

ich will meine alten Sicherungverzeichnisse löschen - leider scheitert es wohl an den Zugriffsrechten. Wie kann ich als Admin dem PS Script entsprechende Rechte geben?

Grüße

gupy 2000

Aufruf:

Get-ChildItem –Path  “F:\” –Recurse | Where-Object{$_.CreationTime –lt (Get-Date).AddDays(-20)} | Remove-Item -Recurse

unerwünschtes Ergebnis:

Get-ChildItem : Der Zugriff auf den Pfad "F:\archiv.2015_06_22_02_00_15\profiles\sf.V2" wurde verweigert.
In Zeile:5 Zeichen:1
+ Get-ChildItem –Path  “F:\” –Recurse | Where-Object{$_.CreationTime –lt (Get-Date ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (F:\archiv.2015_...\profiles\sf.V2:String) [Get-ChildItem], UnauthorizedAccessExc
   eption
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

Move-ADObject & Set-ADComputer return Access Denied

$
0
0

Hi,

I tried to run the cmdlets Move-ADObject and Set-ADComputer as Domain Admin on an Windows 2012 R2 Domain Controller. 'Protect from Accidental Deletion' is disabled on the Containers. The cmdlet fails and I receive an "Access is denied" error message.

This only occurs if I run the cmdlets on a DC. On a member Server it works fine (with same credentials)!!

I found a kb article KB2806748 that refers to a hotfix for 2008 R2 and 2012. But the Problem seems to be still existent in Windows Server 2012 R2.

Is there any way how this can be fixed?

Powershell3 ähnliche Dateinamen in ein Array

$
0
0

Hallo,

mit einem Powershell3 Script durchsuche ich einen Ordner nach bestimmten Dateien:

Get-ChildItem -Path "C:\test" -Recurse -Filter *.mxf | ? { -not $_.PSIsContainer }

In diesem Ordner befinden sich eine unbekannte Anzahl von Dateien, von denen (fast) immer 5 Dateien Dateienamen mit identischem Anfang haben. Zum Beispiel:

0013S0.mxf, 0013S000.mxf, 0013S001.mxf, 0013S002.mxf, 0013S00.mxf

Wie kann ich alle Dateien mit identischem Anfangsteil des Dateinamens zusammenfassen und in ein Array schreiben? Soweit ich das überblicke sollten immer die ersten 6 Zeichen des Dateinamens gleich sein.

Viele Grüße


Powershell - Problem mit RemoteDesktop-Befehlen

$
0
0

Hallo,

mal eine Frage in die Runde, eventuell kennt jemand das Problem:

Mittels Import-Module RemoteDesktopServices sollten ja die RDS-Befehle der PS geladen werden.

Wenn ich nun im Anschluss Get-RDUserSession ausführe (in der ISE wird mir das soweit alles sauber angezeigt), erhalte ich folgende Fehlermeldung:

Get-RDUserSession : Die Remotedesktopdienste-Bereitstellung ist auf "Server.domain.tld" nicht vorhanden. Dieser Vorgang kann nach dem Erstellen einer Bereitstellung
ausgeführt werden. Informationen zum Erstellen einer Bereitstellung erhalten Sie durch Ausführen von "Get-Help Set-VDIDeployment" oder "Get-Help Set-RDSHDeployment".
In Zeile:1 Zeichen:1
+ Get-RDUserSession
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Write-Error], WriteErrorException
    + FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Get-RDUserSession

Kurios dabei, es gibt zwei Bereitstellungen die auch aktuell ganz normal genutzt werden. Egal von welchem Server ich das ausführe (DC, SessionBroker, RDS-Host) immer die selbe Meldung. An was könnte das noch liegen?

Grüße

Forseti2003

Fehlerhaftes Auslesen einer Variable

$
0
0

Hallo zusammen,

und zwar verzweifel ich seit einigen Tagen an einem Script für das auslesen einer OU aus der AD.

Hier einmal mein Script:

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")

$objForm = New-Object System.Windows.Forms.Form
$objForm.ClientSize = New-Object System.Drawing.Size(407, 390)
$objForm.topmost = $true

# OU Auswahl 

$objText1 = New-Object System.Windows.Forms.Label
$objText1.Location = New-Object System.Drawing.Size(10,10) 
$objText1.Size = New-Object System.Drawing.Size(280,20) 
$objText1.Text = "Bitte OU auswählen: "
$objForm.Controls.Add($objText1) 

$computerNames = @(Get-ADOrganizationalUnit -Property Name  -Filter {(Name -like "NLTer*") -or (Name -like "TSI*") -or (Name -like "ZL1*") -or (Name -like "HAMM*")}  -SearchBase 'OU=Land,DC=ads,DC=Firma,DC=net' | select -Expandproperty Name)
$comboBox1 = New-Object System.Windows.Forms.Combobox
$comboBox1.Location = New-Object System.Drawing.Size(10, 30)
$comboBox1.Size = New-Object System.Drawing.Size(300, 20)
$comboBox1.sorted = $true;
foreach($computer in $computerNames)
{
  $comboBox1.Items.add($computer)
}

$objForm.Controls.Add($comboBox1)

# OU Auswahl ende


# Buttons für OU Auswahl 1

$Button = New-Object System.Windows.Forms.Button
$Button.Location = New-Object System.Drawing.Point(110, 50)
$Button.Size = New-Object System.Drawing.Size(75, 23)
$Button.Text = "Weiter"
$Button.add_Click({ListBox})
$objForm.Controls.Add($Button)

$Button2 = New-Object System.Windows.Forms.Button
$Button2.Location = New-Object System.Drawing.Point(191, 50)
$Button2.Size = New-Object System.Drawing.Size(120, 23)
$Button2.Text = "Eingabe Speichern"
$Button2.add_Click({$objText4.Text = $comboBox1.SelectedItem.ToString()})
$objForm.Controls.Add($Button2)


# --------------------------------------------------------------------------



# Abteilungs Auswahl 

$objText2 = New-Object System.Windows.Forms.Label
$objText2.Location = New-Object System.Drawing.Size(10,100) 
$objText2.Size = New-Object System.Drawing.Size(280,20) 
$objText2.Text = "Wählen Sie die NL oder Abteilung aus:"
$objForm.Controls.Add($objText2) 


Function ListBox
{

$searchou = "OU=" + $objText4.Text + ",OU=Land,DC=ads,DC=Firma,DC=net"

$computerNames2 = @(Get-ADOrganizationalUnit -Property Name  -Filter {(Name -like "*")} -SearchBase $searchou | select -Expandproperty Name)
$ListBoxOU = New-Object System.Windows.Forms.Combobox 
$ListBoxOU.Location = New-Object System.Drawing.Size(10,120) 
$ListBoxOU.Size = New-Object System.Drawing.Size(300,20) 
$ListBoxOU.sorted = $true;

foreach($computers2 in $computerNames2) 
{
  $ListBoxOU.Items.add($computers2)
}

$objForm.Controls.Add($ListBoxOU)

}

# Buttons für NL Auswahl 2

$Button3 = New-Object System.Windows.Forms.Button
$Button3.Location = New-Object System.Drawing.Point(191, 140)
$Button3.Size = New-Object System.Drawing.Size(120, 23)
$Button3.Text = "Eingabe Speichern"
$Button3.add_Click({$objText5.text = $ListBoxOU.SelectedItem.ToString()})
$objForm.Controls.Add($Button3)

# Button ende


$objText4 = New-Object System.Windows.Forms.Label
$objText4.Location = New-Object System.Drawing.Size(20,300) 
$objText4.Size = New-Object System.Drawing.Size(200,20) 
$objText4.Text = "1"
$objForm.Controls.Add($objText4) 


$objText5 = New-Object System.Windows.Forms.Label
$objText5.Location = New-Object System.Drawing.Point(20, 320)
$objText5.Size = New-Object System.Drawing.Size(200, 20)
$objText5.Text = "2"
$objForm.Controls.Add($objText5)


[void]$objForm.showdialog()

Komischerweise ließt er die erste Variable aus nur die zweite nicht.

Ich hoffe mir kann jemand einen Tipp geben.

Liebe Grüße 

Nils

Viewing all 2314 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>