Изменить цвет вывода в сценарии Powershell

Я хочу изменить свой сценарий поиска ActiveDirectory, чтобы он выдавал определенный результат в цвете.

Сценарий импортирует модуль AD, а затем предлагает ввести имя пользователя и просмотреть определенные свойства, такие как имя, адрес электронной почты и идентификатор сотрудника.

Есть пара свойств, цвет которых я хотел бы изменить в зависимости от вывода.

Например, если «LockedOut» или «PasswordExpired» имеет значение «True», я бы хотел, чтобы цвет текста для этих конкретных результатов был красным.

Это возможно? Любая помощь приветствуется!

Вот сценарий

Import-Module ActiveDirectory

do{ 
   $username = (read-host "Please Enter Username to Lookup")

   get-aduser $username  -properties Created, Name, EmployeeID, EmailAddress, Enabled, LockedOut, LastBadPasswordAttempt, PasswordExpired, AccountExpires, LastLogonDate, Modified, LogonCount, HomeDirectory, Office, TelephoneNumber | Format-List Created, Modified, LogonCount, Name, EmailAddress, EmployeeID, Enabled, LockedOut, PasswordExpired, LastLogonDate, LastBadPasswordAttempt, HomeDirectory, Office, TelephoneNumber

   $response = Read-Host "Enter 'Y' to check another user, any other key to exit"
   Clear-Host
}
while ($response -eq "Y") 

person James P    schedule 18.10.2013    source источник


Ответы (2)


Write-Host имеет параметры для указания цвета переднего плана и фона:

Import-Module ActiveDirectory
[string[]]$getADProps=echo Created, Name, EmployeeID, EmailAddress, Enabled, LockedOut, LastBadPasswordAttempt, PasswordExpired, AccountExpires, LastLogonDate, Modified, LogonCount, HomeDirectory, Office, TelephoneNumber
[string[]]$flProps=echo Created, Modified, LogonCount, Name, EmailAddress, EmployeeID, Enabled, LockedOut, PasswordExpired, LastLogonDate, LastBadPasswordAttempt, HomeDirectory, Office, TelephoneNumber
do{ 
    $username = (read-host "Please Enter Username to Lookup")
    $adUser=Get-ADUser $username  -properties $getADProps  
    if ($adUser.'LockedOut' -or $adUser.'PasswordExpired'){
        $adUser | Format-List $flProps  | Out-String | Write-Host -ForegroundColor Red
    }
    else{
        $adUser | Format-List $flProps
    }
    $response = Read-Host "Enter 'Y' to check another user, any other key to exit"
    Clear-Host
}while ($response -eq "Y") 
person Dirk    schedule 18.10.2013
comment
Спасибо, Дирк, к сожалению, я получаю сообщение об ошибке при использовании вашего ответа. Список форматов: невозможно преобразовать System.Management.Automation.PSObject в один из следующих типов {System.String, System.Management.Automation.ScriptBlock}. В строке:11 символов:30 + $adUser | format-List ‹‹‹‹ $flProps + CategoryInfo : InvalidArgument: (:) [Format-List], NotSupportedException + FullyQualifiedErrorId : DictionaryKeyUnknownType,Microsoft.PowerShell.Commands.FormatListCommand - person James P; 18.10.2013
comment
Привет, Джеймс, да, я вижу, ты используешь PowerShell v2. Я только что проверил на v3. Я внес некоторые изменения, чтобы он работал и на версии 2. - person Dirk; 19.10.2013

person    schedule
comment
Привет, Билл, спасибо за помощь, почти готово, но в основном я просто хочу, чтобы статус был определенного цвета. Например, когда PS возвращает результаты, я хотел бы изменить цвет отдельных элементов; Я бы хотел, чтобы «Включено», если «Верно» было зеленым, если «Ложь» было красным. чтобы он выделялся более четким и лаконичным образом - person James P; 18.10.2013
comment
Для этого вам нужно будет создать свой собственный вывод и объединить write-host -nonewline и write-host -foregroundcolor. Например: write-host -nonewline "Account disabled: ", затем write-host -foregroundcolor Red "True" на следующей строке. Вы не сможете использовать таблицу форматов, поскольку она будет выводить объект в текущих цветах консоли. - person Bill_Stewart; 21.10.2013