mguenth83
Goto Top

Powershell Terminalserver Property abschalten

Hi,
ich versuche seit Stunden krampfhaft die Option "Beim Anmelden Verbindung zu Clientlaufwerken herstellen" abzuschalten.
Die Einstellungen sind zu finden bei dem Benutzer im AD unter Umgebung.

Ich versuche das ganze mit Powershell zu realisieren doch der Code lässt dies anscheinend nicht zu.

Hier mal der Code der das Protperty verändern soll.

$OU = "contoso.de/Benutzer"
Get-QADUser -searchRoot $OU -searchScope 'OneLevel' | Where-Object {$_.displayName -Like "mguenther*"} | Set-QADUser -TsDefaultToMainPrinter $false -whatIf


Er spuckt leider auch keine Fehlermeldung zu dem Befehl aus, es sieht so aus als wenn es funktioniert, tut es aber leider nicht.

Gruß
Matze

Content-ID: 215345

Url: https://administrator.de/forum/powershell-terminalserver-property-abschalten-215345.html

Ausgedruckt am: 21.12.2024 um 06:12 Uhr

yasami
yasami 27.08.2013 um 15:46:50 Uhr
Goto Top
hast du die AD-Module aktiviert?

"Import-Module ActiveDirectory"

Diese müssen immer als erstes aktiviert werden, vielleicht liegt es daran ;)
DerWoWusste
DerWoWusste 27.08.2013 um 15:57:51 Uhr
Goto Top
Hi.

Und der Parameter -whatif ist nicht zufällig der Schuldige?
colinardo
colinardo 27.08.2013 um 16:04:15 Uhr
Goto Top
Hallo Matze,
dazu habe ich hier in einem ähnlichen Artikel ein Kommentar geschrieben wie man erweiterte Attribute in den Eigenschaften des Users setzt.
Remotedektopdienste Profil im Active Directory per Batch setzen

Die passenden Eigenschaften heißen : ConnectClientDrivesAtLogon und ConnectClientPrintersAtLogon und können jeweils den Wert 1 oder 0 annehmen.

Zu deinem Script: Die Angabe der OU hat denke ich nicht das richtige Format.
Schau in dem o.a Artikel dann siehst du wie man diese angibt. Dann brauchst du auch nicht den erweiterten Befehl Get-QADUser benutzen.

Grüße Uwe
mguenth83
mguenth83 27.08.2013 aktualisiert um 16:38:19 Uhr
Goto Top
PS C:\Users\1> Get-QADUser mguenther

Name Type DN

mguenther user CN=mguenther,OU=Benutzer,DC=contoso,DC=de

komischerweise findet er den benutzer mit dem Get-Befehl. Mit dem Set Befehl geht's nicht.

Colrinardo hast du auch ein Script wo nicht jeder der Parameter gesetzt wird. Will das nur für spezielle User machen.

Gruß
Matze
mguenth83
mguenth83 27.08.2013 aktualisiert um 16:43:06 Uhr
Goto Top
Habe jetzt auch nochmal das whatif weggenommen. Jetzt sagt er auch ne Fehlermeldung

$OU = "contoso.de/Benutzer"
Get-QADUser -searchRoot $OU -searchScope 'OneLevel' | `
Where-Object {$_.displayName -Like "mguenther*"} | `
Set-QADUser -TsConnectClientDrives $false

Set-QADUser : Unbekannter Name. (Exception from HRESULT: 0x80020006 (DISP_E_UNKNOWNNAME))
In Zeile:18 Zeichen:1
+ Set-QADUser -TsConnectClientDrives $false `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (face-smile [Set-QADUser], COMException
+ FullyQualifiedErrorId : System.Runtime.InteropServices.COMException,Quest.ActiveRoles.ArsPowerShellSnapIn.Powershell.
Cmdlets.SetUserCmdlet
colinardo
colinardo 27.08.2013 aktualisiert um 18:11:02 Uhr
Goto Top
Zitat von @mguenth83:
Colrinardo hast du auch ein Script wo nicht jeder der Parameter gesetzt wird. Will das nur für spezielle User machen.
OK da hat mal wieder keiner Zeit zum Lesen .... wieso dann ein Script wenn es nur ein paar User sind ?
Na egal ....guckst du hier:
$OU = "CN=Michael Mustermann,OU=Benutzer,DC=contoso,DC=de"  
$objUser = [ADSI] "LDAP://$OU"  
# # Einige Terminal Service Eigenschaften ausschalten
# # '0' = Disabled   '1' = Enabled 
$objUser.psbase.InvokeSet('ConnectClientDrivesAtLogon',0)  
$objUser.psbase.InvokeSet('DefaultToMainPrinter',0)  
$objUser.psbase.InvokeSet('ConnectClientPrintersAtLogon',0)  
$objUser.SetInfo()
Die möglichen Eigenschaften die du für das TerminalServer Interface setzen kannst, kannst du hier nachlesen.

Damit sollten deine Fragen beantwortet sein.

Grüße Uwe
mguenth83
mguenth83 27.08.2013 um 17:05:14 Uhr
Goto Top
Danke für dein Script,
sagen wir es so ich lege einen Benutzer an mit diversen Gruppen und Einstellungen. Jeden neuen User den ich ab jetzt erstelle soll die Häckchen raus haben.

Dein Script ist gut doch leider spuckt er mir wieder eine Fehlermeldung aus:

Liegt es vielleicht daran das ich in meiner Realen Domain ein Bindestrich drin habe? Contoso-m z.B


Ausnahme beim Aufrufen von "InvokeSet" mit 2 Argument(en): "Unbekannter Name. (Exception from HRESULT: 0x80020006
(DISP_E_UNKNOWNNAME))"
In Zeile:4 Zeichen:1

back-to-top$objUser.psbase.InvokeSet('ConnectClientDrivesAtLogon',0)

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Ausnahme beim Aufrufen von "InvokeSet" mit 2 Argument(en): "Unbekannter Name. (Exception from HRESULT: 0x80020006
(DISP_E_UNKNOWNNAME))"
In Zeile:5 Zeichen:1
+$objUser.psbase.InvokeSet('DefaultToMainPrinter',0)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Ausnahme beim Aufrufen von "InvokeSet" mit 2 Argument(en): "Unbekannter Name. (Exception from HRESULT: 0x80020006
(DISP_E_UNKNOWNNAME))"
In Zeile:6 Zeichen:1
+ $objUser.psbase.InvokeSet('ConnectClientPrintersAtLogon',0)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
colinardo
colinardo 27.08.2013 aktualisiert um 18:10:15 Uhr
Goto Top
Das liegt definitv daran, das dein Distinguished Name nicht korrekt ist.
Du darfst dabei den Usernamen nicht so schreiben wie ihn der Benutzer zum Login benutzt, sondern so wie der Name in der MMC steht! Wichtig!
Die Eigenschaft des Userobjekts die diesen Namen enthält ist: "cn".
also z.B.
$OU = "CN=Michael Mustermann,OU=Benutzer,DC=contoso,DC=de"
Grüße Uwe
mguenth83
mguenth83 28.08.2013 um 07:47:55 Uhr
Goto Top
Hi Uwe,
habe jetzt das ganze mal ausprobiert und es scheint jedenfalls das er den Namen nimmt, leider kommt jetzt schon wieder eine Fehlermeldung mit dem InvokeCommand.

Ausnahme beim Aufrufen von "InvokeSet" mit 2 Argument(en): "Ein solches Objekt ist auf dem Server nicht vorhanden.
"
In Zeile:6 Zeichen:1
+ $objUser.psbase.InvokeSet('ConnectClientDrivesAtLogon',0)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Ausnahme beim Aufrufen von "InvokeSet" mit 2 Argument(en): "Ein solches Objekt ist auf dem Server nicht vorhanden.
"
In Zeile:7 Zeichen:1
+ $objUser.psbase.InvokeSet('DefaultToMainPrinter',0)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Ausnahme beim Aufrufen von "InvokeSet" mit 2 Argument(en): "Ein solches Objekt ist auf dem Server nicht vorhanden.
"
In Zeile:8 Zeichen:1
+ $objUser.psbase.InvokeSet('ConnectClientPrintersAtLogon',0)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Ausnahme beim Abrufen des Elements "SetInfo": "Ein solches Objekt ist auf dem Server nicht vorhanden.
"
In Zeile:9 Zeichen:1
+ $objUser.SetInfo()
+ ~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (face-smile , ExtendedTypeSystemException
+ FullyQualifiedErrorId : CatchFromBaseGetMember
colinardo
colinardo 28.08.2013 aktualisiert um 08:35:50 Uhr
Goto Top
poste bitte deinen Code(aber bitte mit Tags) ansonsten kann ich dir nicht weiterhelfen, da ich den obigen Code erfolgreich getestet habe, muss der Fehler in deinem Script liegen.
Da ich die selben Fehlermeldungen erhalte wenn der DN nicht korrekt ist liegt meine Vermutung das dieser nicht korrekt ist. Hat der Name des Users (cn) zufällig ein Komma zwischen Vor- und Nachnamen ? also Michael, Mustermann , dann musst du dieses mit einem Backslash escapen -> Michael\, Mustermann

Grüße Uwe
mguenth83
mguenth83 28.08.2013 aktualisiert um 11:12:42 Uhr
Goto Top
Hi,
also entweder steh ich aufm Schlauch oder irgendwas ist hier faul,
ich geb dir mal die Daten die ich aufm MMC habe.

In der OU Benutzer sieht der Name wie folgt aus:
Name Typ Beschreibung
mguenther Benutzer test

Wenn ich in die Eigenschaften gehe:
Vorname: Matthias
Nachname: Günther
Anzeigename: mguenther
Beschreibung: test
Benutzernameldename (Prä-Windows2000): mguenther
Kanonischer Name des Objekts: contoso.de/Benutzer/mguenther

Wenn ich den Befehl:
$OU = "contoso.de/Benutzer"  
Get-QADUser -searchRoot $OU -searchScope 'OneLevel' | `  
Where-Object {$_.displayName -Like "mguenther*"}   


kommt als Ergebniss:

Name                           Type            DN                                                                           
----                                ------             ---------                                                                           
mguenther                    user            CN=mguenther,OU=Benutzer,DC=contoso,DC=de

Hoffe das gibt Aufschluss darüber was falsch ist...

Gruß
Matthias
colinardo
colinardo 29.08.2013 aktualisiert um 13:13:50 Uhr
Goto Top
dann muss für mein Script die erste OU-Zeile bei dir so lauten:
$OU = "CN=mguenther,OU=Benutzer,DC=contoso,DC=de"
mit welchem Betriebsystem arbeitest du, bzw. welche Powershell Version ?
geb mal ein:
$PSVersionTable
und poste die Ausgabe

und probier nur mal folgende kurze Zeile:
([ADSI]"LDAP://contoso.de/CN=mguenther,OU=Benutzer,DC=contoso,DC=de").cn  
Dann sollte der Name des Users ausgegeben werden, ansonsten stimmt in deinem System etwas nicht.

Alternativ kannst du das setzen der Properties in meinem Script oben auch mal so probieren:
$objUser.Put('ConnectClientDrivesAtLogon',0)  
$objUser.SetInfo()
Mehr Info dazu findest du hier.
mguenth83
mguenth83 17.09.2013 um 22:21:47 Uhr
Goto Top
Hat leider alles nicht funktioniert daher habe ich jetzt diese befehele genutzt

Set-QADUser $Benutzername -TsConnectClientDrives 0
Set-QADUser $Benutzername -TsConnectPrinterDrives 0
Set-QADUser $Benutzername -TsDefaultToMainPrinter 0