Почему не отображается правильная дата? Метка вывода в PowerShell с #

Как я могу исправить эту проблему? Я пытаюсь отобразить вывод сценария PowerShell на этикетке. Код PowerShell работает нормально, когда я запускаю его, но если мне нужно получить вывод, чтобы ничего не отображать, отображается только сообщение об ошибке, которое я пишу, если я изменяю сценарий и помещаю Write-Output(перед get-aduser), и я запускаю его 1601/01/01 00:00:00 эта дата появляется 4 раза (c# может отображать эту версию)

Код Powershell (отображает дату истечения срока действия пароля текущего пользователя, вошедшего в систему):

      Get-ADUser -Filter "SamAccountName -eq '$env:username'" -Properties "msDS-UserPasswordExpiryTimeComputed" | 
Select-Object -Property @{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}} | ft ExpiryDate -HideTableHeaders

C #

          PowerShell ps = PowerShell.Create();
    ps.AddScript(File.ReadAllText(@"C:\temp\passexp.ps1"));
    ps.AddCommand("Out-String");
    var result = ps.Invoke();

    foreach (var item in result)
    {
        label5.Text = item.ToString();
    }
    if (ps.HadErrors==true)
    {
        label5.Text = "Error!";
    }

1 ответ

Я бы изменил ваш сценарий passexp.ps1, чтобы он также учитывал значения атрибутов. PasswordNeverExpiresа также PasswordNotRequired.
Далее удаляем строку ps.AddCommand("Out-String");из вашего кода С#.

      $properties = 'PasswordNeverExpires', 'PasswordNotRequired', 'msDS-UserPasswordExpiryTimeComputed'
$user = Get-ADUser -Filter "SamAccountName -eq '$env:USERNAME'" -Properties $properties

# do not output a date, but rather a message in these cases
if ($user.PasswordNeverExpires) { return "Password for user $($env:USERNAME) never expires"}
if ($user.PasswordNotRequired)  { return "User $($env:USERNAME) doesn't need a password"}

# return the password expiry date as object (local time)
[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")
Другие вопросы по тегам