2015-05-20 61 views
2

我正在放置一個腳本,它將註銷已處於斷開連接狀態10多個小時的VDI會話。除了最後一道關卡之外,我已經設法將所有內容都集中在一起 - 實際上是強制註銷。Win32Shutdown通用故障

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參數應允許遠程登出,它會工作,如果我有一個實時PCOIP會話到VDI我試圖關閉,但不是當處於斷開狀態。
任何人都可以指向正確的方向嗎?

+0

你見過這[MSDN文檔](https://msdn.microsoft.com/en-us/library/aa394058(v = vs.85).aspx)?它提到你需要'SE_SHUTDOWN_NAME',它也建議在同一個WMI類上嘗試'Win32ShutdownTracker'方法。因此,我個人首先嚐試使用'Enter-PSSession'遠程訪問主機,並列出我的權限('whoami/priv'),然後嘗試調用相同的wmi命令以查看是否以此方式工作。 – nohwnd

+0

@nohwnd是的,這是我一直在努力的文檔。我有域管理員權限,所以不會是問題,我剛剛嘗試過'Win32ShutdownTracker'並且有同樣的問題。我試圖使用強制關機參數,因爲這看起來可以正常工作,桌面也會刷新,所以它的結果是一樣的(儘管速度稍慢) –

+0

已經使用VMware View的內置「Powercli」替代命令解決了這個問題, 。 'get-remotesession -state「斷開連接」| Where-Object {($ _。duration -match'Day'-or $ _。duration -match'\ d \ d hours')} |發送-SessionLogoff' –

回答

0

仍然不能完全確定爲什麼第一個腳本給出錯誤,但我改用VMWare View內置的PowerCLI管理單元來產生相同的結果 - 更快,更高效。

get-remotesession -state "Disconnected" | Where-Object {($_.duration -match 'Day' -or $_.duration -match '\d\d hours')} | Send-SessionLogoff 

這將查詢任何會話地平線視圖服務器與「中斷狀態」,那麼它會過濾掉有不到10小時的使用壽命任何對象,並註銷任何剩下來。

這需要將VMware View PowerCLI PSSnippets加載並連接到斷開的視圖連接。