根据用户名输入变量断开 RDS 用户
Disconnect RDS User Based On Username Input Variable
我正在尝试创建一个可以在 RDS 服务器场环境中强制注销用户的脚本。用户可以登录 4 个 RDS 服务器中的 1 个,我正在尝试这样做,以便您 运行 脚本,输入用户名,它将强制用户注销。到目前为止我有:
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
变量作为该项目的输入。如果我执行 write-output $sid
它会显示正确的 UnifiedSessionID
数字。
我可能完全以错误的方式执行此操作,但我只需要一种方法来根据提示时输入的用户名断开用户会话。
$sid
变量正在加载其数据类型为管道中最后一个操作的数据类型的数据,即 format-wide
。因此,$sid
的数据类型可能类似于 Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
。
您可以通过在 $sid
加载后立即执行命令 $sid | get-member
来验证。
可能是Invoke-RDUserLogoff
的-UnifiedSessionID
参数必须是字符串,而$sid
不是string
如果是这种情况,您必须将 $sid
转换为 string
问题是您永远无法获得全格式的 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
I could be doing this the wrong way altogether
确实:
Format-*
cmdlet 仅用于生成输出用于显示。
- 从不将它们用于程序化处理。
对于程序化处理,使用Select-Object
:
- 使用
Select-Object <prop1>, ...
提取多个属性作为自定义对象。
- 使用
Select-Object -ExpandProperty <prop>
提取一个单个属性的值.
向您展示了如何根据您的情况执行此操作。
我正在尝试创建一个可以在 RDS 服务器场环境中强制注销用户的脚本。用户可以登录 4 个 RDS 服务器中的 1 个,我正在尝试这样做,以便您 运行 脚本,输入用户名,它将强制用户注销。到目前为止我有:
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
变量作为该项目的输入。如果我执行 write-output $sid
它会显示正确的 UnifiedSessionID
数字。
我可能完全以错误的方式执行此操作,但我只需要一种方法来根据提示时输入的用户名断开用户会话。
$sid
变量正在加载其数据类型为管道中最后一个操作的数据类型的数据,即 format-wide
。因此,$sid
的数据类型可能类似于 Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
。
您可以通过在 $sid
加载后立即执行命令 $sid | get-member
来验证。
可能是Invoke-RDUserLogoff
的-UnifiedSessionID
参数必须是字符串,而$sid
不是string
如果是这种情况,您必须将 $sid
转换为 string
问题是您永远无法获得全格式的 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
I could be doing this the wrong way altogether
确实:
Format-*
cmdlet 仅用于生成输出用于显示。- 从不将它们用于程序化处理。
对于程序化处理,使用
Select-Object
:- 使用
Select-Object <prop1>, ...
提取多个属性作为自定义对象。 - 使用
Select-Object -ExpandProperty <prop>
提取一个单个属性的值.
- 使用