我正在整理一个脚本,该脚本将注销已处于断开状态超过10小时的VDI会话。除了最后的障碍之外,我已经成功地把所有东西都放在了一起 - 实际上是强迫注销。
ForEach ($Desktop in $VDIlist)
{
$win32OS = Get-wmiobject win32_operatingsystem -ComputerName $desktop.'DNS Name' -EnableAllPrivileges
write-host "Shutting down host $Desktop."DNS Name""
$win32OS.Win32Shutdown(4)
}
这导致以下错误。
Exception calling "Win32Shutdown" : "Generic failure "
At line:1 char:1
+ $win32OS.win32shutdown(4)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : WMIMethodException
当没有使用参数时,这似乎不会发生
($win32os.win32shutdown()
),但这也不会像我要求的那样强制退出。
据我所知,-EnableAllPrivileges
参数应该允许远程注销,如果我有一个到VDI的实时PCoIP会话,我试图关闭但是当处于断开连接状态时,它确实有效。
有人能指出我正确的方向吗?
答案 0 :(得分:0)
仍然不完全确定为什么第一个脚本会出错,但我转而使用VMWare View内置的PowerCLI snapin来产生相同的结果 - 只是更快,更有效。
get-remotesession -state "Disconnected" | Where-Object {($_.duration -match 'Day' -or $_.duration -match '\d\d hours')} | Send-SessionLogoff
这将查询Horizon视图服务器以查找具有“Disconnected state”的任何会话,然后它将过滤掉生命周期少于10小时的所有对象,并注销剩余的任何对象。
这需要加载VMware View PowerCLI PSSnippets并将其连接到断开的视图连接。