1

Я использую модуль 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 (обновлена ​​с одинаковыми версиями всех модулей, фреймворков и т. Д.).

ответ

0

Это известная ошибка в powershell (v1, v2 и 3), когда свойство пустое, и вы используете ExpandProperty для его чтения, он возвращает эту ошибку.

 Смежные вопросы

  • Нет связанных вопросов^_^