Berechtigungen für GetSessions usw. in PowerShell-Remoting
Um nicht immer eine (freie) RDP-Anmeldung und ein Citrix-GUI zu bemühen, will ich uns eine Möglichkeit des PowerShell-Remoting schaffen.
Vorteile
Nachteile
Schritte dahin:
Sieht aus wie eine .NET-Exception, also ist GetSessions wohl eine vom Cmdlet oder Modul-dll gerufene Methode aus dem .NET-Framework.
Später will ich natürlich auch die anderen Funktionen aus dem Modul ausführen:
Welche Rechte brauche ich auf den Terminalservern, um diese Methoden anwenden zu dürfen? Welches Assembly enthält GetSessions, welchen security groups auf welchen Servern muss ich mich hinzufügen?
Vorteile
- Die Zahl der PS-Remote-Sessions ist m.W. nicht künstlich, lizenzrechtlich beschränkt.
- Geht schnell.
Nachteile
- Nicht jeder kann damit umgehen, es gibt erstaunlich viele Mausklicker unter den Admins.
- Es gibt manchmal Berechtigungsprobleme, so auch hier.
Schritte dahin:
- Terminalservices-Befehle gesucht, keinen Hinweis im Netz auf Core-Lösungen (Cmdlets, Zugriff auf statische .NET-Methoden o.ä.) gefunden. Dafür dies: https://psterminalservices.codeplex.com/
- psterminalservices auf einem Terminalserver in Modules-Ordner entpackt, Import-Module, läuft.
- PowerShell-Profile ergänzt um
Import-Module PSTerminalServices
function Get-TsSessionByUserName
{
for ($i = 1; $i -le 8; $i++)
{
$strTsSvr = "TS00$i"
"Get-TSSession -ComputerName $strTsSvr -UserName $($args)"
Get-TSSession -ComputerName $strTsSvr -UserName $($args)
}
}
- Test in PowerShell lokal erfolgreich:
Get-TsSessionByUserName user
Get-TSSession -ComputerName TS001 -UserName user
Get-TSSession -ComputerName TS002 -UserName user
Server SessionID State IPAddress ClientName WindowStationName UserName
------ --------- ----- --------- ---------- ----------------- --------
TS002 25 Active ... ... ... domain\user
Get-TSSession -ComputerName TS003 -UserName user
Get-TSSession -ComputerName TS004 -UserName user
TS004 11 Disconnected domain\user
Get-TSSession -ComputerName TS005 -UserName user
Get-TSSession -ComputerName TS006 -UserName user
Get-TSSession -ComputerName TS007 -UserName user
Get-TSSession -ComputerName TS008 -UserName user
- Erfolgreich Sitzung von entferntem Rechner geöffnet:
Enter-PSSession TS006
- Get-TSSession user: Erfolgreich / ohne Fehler -> Das Modul ist verfügbar.
- Da das lokale Profil nicht ausgeführt wird und mir der Aufwand für ein remote profile nur für diese Mini-Function zu groß ist, gebe ich zum Test ein oder definiere die function vor der Verwendung in der Sitzung. Und erhalte folgende Fehlermeldung:
Get-TSSession -ComputerName TS001 -UserName user
Exception calling "GetSessions" with "0" argument(s): "Zugriff verweigert"
+ CategoryInfo : NotSpecified: (:) , MethodInvocationException
+ FullyQualifiedErrorId : Win32Exception
Sieht aus wie eine .NET-Exception, also ist GetSessions wohl eine vom Cmdlet oder Modul-dll gerufene Methode aus dem .NET-Framework.
Später will ich natürlich auch die anderen Funktionen aus dem Modul ausführen:
CommandType Name ModuleName
----------- ---- ----------
Function Disconnect-TSSession PSTermina...
Function Get-TSCurrentSession PSTermina...
Function Get-TSProcess PSTermina...
Function Get-TSServers PSTermina...
Function Get-TSSession PSTermina...
Function Send-TSMessage PSTermina...
Function Stop-TSProcess PSTermina...
Function Stop-TSSession PSTermina...
Welche Rechte brauche ich auf den Terminalservern, um diese Methoden anwenden zu dürfen? Welches Assembly enthält GetSessions, welchen security groups auf welchen Servern muss ich mich hinzufügen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 335125
Url: https://administrator.de/contentid/335125
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
6 Kommentare
Neuester Kommentar
Btw. native CMDLets gibt es dafür schon !
Remote Desktop Cmdlets in Windows PowerShell
Remote Desktop Cmdlets in Windows PowerShell
Man kann das was in einer Remote-Session möglich ist einschränken. Per Default ist nicht alles in einer solchen Session erlaubt. Das lässt sich anpassen indem man in der Config einen Parameter auf FullLanguage anpasst:
http://blogs.microsoft.co.il/scriptfanatic/2011/08/22/get-full-control- ...
Btw. sollte man natürlich eher mit Invoke-Command arbeiten statt interaktiv mit enter-pssession!
http://blogs.microsoft.co.il/scriptfanatic/2011/08/22/get-full-control- ...
Btw. sollte man natürlich eher mit Invoke-Command arbeiten statt interaktiv mit enter-pssession!