Powershell 根据用户名输入变量断开RDS用户连接
我正在尝试创建一个脚本,该脚本可以强制RDS服务器场环境中的用户注销。用户可以登录到4个RDS服务器中的1个,我正在尝试这样做,以便您运行脚本,输入用户名,它将强制用户注销。到目前为止,我已经:Powershell 根据用户名输入变量断开RDS用户连接,powershell,powershell-4.0,Powershell,Powershell 4.0,我正在尝试创建一个脚本,该脚本可以强制RDS服务器场环境中的用户注销。用户可以登录到4个RDS服务器中的1个,我正在尝试这样做,以便您运行脚本,输入用户名,它将强制用户注销。到目前为止,我已经: import-module remotedesktop $user = read-host -prompt 'Enter Username you want to disconnect' $sid = Get-RDUserSession | Where-Object -filter {$_.UserNa
import-module remotedesktop
$user = read-host -prompt 'Enter Username you want to disconnect'
$sid = Get-RDUserSession | Where-Object -filter {$_.UserName -eq $user} | format-wide -Property UnifiedSessionID
$server = Get-RDUserSession | Where-Object -filter {$_.UserName -eq $user} | format-wide -Property HostServer
Invoke-RDUserLogoff -HostServer "$server" -UnifiedSessionID $sid
最后一行中唯一的问题是它不喜欢将$sid
变量作为该项的输入。如果执行写入输出$sid
,它将显示正确的UnifiedSessionID
编号
我可能会完全错误地这样做,但我只需要一种方法在提示时根据用户名输入断开用户会话。正在加载
$sid
变量,该变量的数据类型是管道中最后一个操作的数据类型,即格式范围
。因此,$sid
的数据类型可能类似于Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
您可以在加载$sid
后立即执行命令$sid | get member
进行验证
可能是调用RDUserLogoff
的-UnifiedSessionID
参数必须是字符串,而$sid
不是字符串
如果是这种情况,您必须将
$sid
转换为字符串
,问题是您永远无法获得格式广泛的UnifiedSessionID存储
使用select-ExpandProperty
import-module remotedesktop
$user = read-host -prompt 'Enter Username you want to disconnect'
$sid = Get-RDUserSession | Where-Object -filter {$_.UserName -eq $user} | select -ExpandProperty UnifiedSessionID
$server = Get-RDUserSession | Where-Object -filter {$_.UserName -eq $user} | select -ExpandProperty HostServer
Invoke-RDUserLogoff -HostServer "$server" -UnifiedSessionID $sid
我可能完全用错了方法
事实上:
cmdlet仅用于生成用于显示的输出Format-*
- 永远不要将它们用于编程处理
- 对于编程处理,请使用
选择对象
:
- 使用
将多个特性提取为自定义对象选择对象,…
- 使用
提取单个属性的值Select Object-ExpandProperty
- 使用
演示如何在您的案例中执行此操作。这正是数据类型。对不起,我该如何将该数据类型转换为字符串?不管怎样,我只是在末尾添加了
| out string
,现在可以正常工作了。非常感谢你!很好听-很容易忘记,PowerShell
cmdlet
通常接受并发出基于对象的实体。Get Member
cmdlet
是您的朋友,因为它可以告诉您任何对象的datatype
是什么,而您可以在特定情况下检索Format-*
cmdlet生成的对象的底层数据,更好的方法是,当目的是对输出进行编程处理时,首先不要使用这些cmdlet。你应该在回答中说清楚。@mklement0:同意。你的回答解决了根本原因。但是,我认为我们都必须考虑到他的需求也可能需要格式化输出。如果我要改变我的答案,我想我会把这个问题/错误和他最初的(暗示的)要求放在一边:。我明白了,这是一个很好的信息。我两天前就开始在powershell里组装东西了