我正在尝试创建一个可以强制在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
号码。
我可能完全以错误的方式执行此操作,但我只需要在提示时根据用户输入断开用户会话。
答案 0 :(得分:1)
问题是你永远不会使用格式范围的
获得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
答案 1 :(得分:1)
我可能完全以错误的方式做这件事
确实:
Format-*
cmdlet仅用于生成输出以供显示。
对于程序化处理,请使用Select-Object
:
Select-Object <prop1>, ...
将多个属性提取为自定义对象。Select-Object -ExpandProperty <prop>
提取单个属性值。Frédéric Bonneau's helpful answer告诉您如何在您的情况下执行此操作。
答案 2 :(得分:-1)
$sid
变量正在加载数据,其数据类型是管道中最后一个操作的数据类型,即format-wide
。因此,$sid
的数据类型可能类似于Microsoft.PowerShell.Commands.Internal.Format.FormatStartData
。
您可以在加载$sid | get-member
后立即执行命令$sid
进行验证。
-UnifiedSessionID
的{{1}}参数可能必须是字符串,而Invoke-RDUserLogoff
不是$sid
如果是这种情况,您必须将string
投放到$sid