Я использую модуль Shay's (фантастический!) PSTerminalServices Powershell для поиска отключенных сеансов в нашей ферме TS. Я разработал сценарий (с помощью Stackoverflow!) На моей рабочей станции Windows 7 x64 (используя PS ISE x86). С тех пор я развернул код на моем новом сервере процессов Windows 2012, где я его протестировал (опять же в ISE x86) .... и он исключил исключения.Powershell: Get-TSSession - не удается получить доступ к свойствам ConnectedTime & DisconnectedTime объекта obj в Windows Server 2012, который я могу использовать в Windows 7
код (который работает в Windows 7) является:
#variables
$SubjectLine = "Disconnected Session Discovered on Terminal Server"
$Sender = "[email protected]"
$Recipient = "[email protected]"
$Attachment = ""
$Exceptions = ""
$BodyPart1 = "You are being sent this email because you have a disconnected session on a Terminal Server. The session is as follows: `r`n`r`n"
$BodyPart3 = "Please log back on to this terminal server, close all data entry systems and log off properly (via the Start menu). Please do not click the the top-right X as this only closes the remote window. Following this procedure will help prevent data/index corruption and other work-stopping issues. `r`n`r`n Thank you"
#terminalservers.txt contains a list of terminal servers to check
$tsservers = Get-Content ".\terminalservers.txt"
foreach ($i in $tsservers){
Get-TSSession -ComputerName $i | ? { $_.state -eq "Disconnected" } | % {
$username = $_ | select -ExpandProperty UserName
$server = $_ | select -ExpandProperty Server
#>>>>THESE next two lines work on Windows 7 but not on Server 2012...?<<<<
$connect = $_ | select -ExpandProperty ConnectTime
$disconnect = $_ | select -ExpandProperty DisconnectTime
$query = "SELECT * from ds_user where ds_sAMAccountName='$username'"
$user = Get-WmiObject -Query $query -Namespace "root\Directory\LDAP"
$user.DS_mail
#build email body
Body = $BodyPart1 + "Username: " + $username + "`r`n" + "Terminal Server Name: " + $server.ServerName + "`r`n" + "Connect Time: " + $connect.DateTime + "`r`n" + "Disconnect Time: " + $disconnect.DateTime + "`r`n`r`n`r`n" + $BodyPart3
#send email to user
SendMail $SubjectLine $Body $Sender $Recipient
}
}
два свойства, которые я не могу извлекать в ОС Windows 2012 являются: ConnectTime и DisconnectTime. При запуске на сервере 2012 я получаю сообщение об ошибке:
select : Cannot process argument because the value of argument "obj" is null. Change the value of argument "obj" to a non-null value. At C:\somefolder\terminal_server_session_reporter.ps1:39 char:26 + $connect = $_ | select -ExpandProperty ConnectTime + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Select-Object], PSArgument NullException + FullyQualifiedErrorId : ArgumentNull,Microsoft.PowerShell.Commands.Selec tObjectCommand
select : Cannot process argument because the value of argument "obj" is null. Change the value of argument "obj" to a non-null value. At C:\somefolder\terminal_server_session_reporter.ps1:39 char:26 + $connect = $_ | select -ExpandProperty ConnectTime + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Select-Object], PSArgument NullException + FullyQualifiedErrorId : ArgumentNull,Microsoft.PowerShell.Commands.Selec tObjectCommand
Это просто эти два свойства, которые вызывают проблемы. Если я прокомментирую их, код будет отлично работать на сервере 2012. Я подтвердил, что я запускаю ту же версию модуля PSTerminalServices, а также .NET Framework 4 и cassia.dll. Обе машины работают с той же версией Powershell 3. Я могу развернуть этот код с этими двумя пропущенными свойствами ... но они действительно очень полезны, и я хотел бы включить их, если это вообще возможно.
Есть ли у кого-нибудь какие-либо предложения относительно того, почему это не будет работать на сервере 2012 года или как его исправить?
О, я также хотел бы отметить, что следующий код ДЕЛАЕТ работу на Server 2012:
Get-TSSession -computername terminalserver1 | Select ConnectedTime, DisconnectedTime
... так что, казалось бы, что свойства могут использоваться при обращении в этой манере ... Я m озадачен.
РЕДАКТИРОВАТЬ 1: Я только что подтвердил, что такая же проблема существует в Windows Server 2008 R2 (обновлена с одинаковыми версиями всех модулей, фреймворков и т. Д.).