Powershell, очистка выходных данных


Я пишу сценарий, чтобы получить имя пользователя любого пользователя, вошедшего на любой компьютер. Он прекрасно работает с 2 исключениями.

Вот код:

$computername = Get-Content 'I:NodeListSWSL.txt'
Remove-item "I:NodeListUsersPC.txt"
foreach ($computer in $computername) 
{
    if(Test-Connection -Computername $Computer -BufferSize 16 -Count 1 -ea 0)
    {        
        $Uinfo = gwmi win32_computersystem -comp $computer | select Username,Caption #,Manufacturer
        $Uinfo | Out-File -Filepath "I:NodeListUsersPC.txt" -Append
        Write-Host $Uinfo
    }else{ 
        Write-Host $computer " Is offline, not responing to ping"
        $computer + " Is offline!" | Out-File -Filepath     "I:NodeListUsersPC.txt" -Append
    }
}

Сначала выводится:

USername       Caption 
--------       ------- 
BINYANCharlie SYD-WS04

Но я хотел бы только иметь:

Чарли Сид-WS04

Домен всегда один и тот же, поэтому мне нужно только имя пользователя и имя компьютера, а не заголовки или "- - - "

2-Я Проблема заключается в том, что мы являемся рендер-фермой, и все рендеры обрабатываются на учетная запись пользователя называется "Render". Для этих компьютеров я получаю только имя компьютера, имя пользователя пустое. Эта учетная запись пользователя является пользователем домена, но не в подразделении, как другие (Сидней, Мельбурн, Брисбен). Он находится в папке "пользователи" по умолчанию в AD.

1 2

1 ответ:

Вы можете удалить доменное имя, используя regex, который заменяет все до и включая \: '.*?\\'

Вы избавляетесь от заголовка, используя select -expand или используя цикл foreach, где вы выбираете свойства, используя $_.PROPERTY

Таким образом, ваше утверждение может выглядеть следующим образом:

$Uinfo = gwmi win32_computersystem -comp $computer | 
 foreach { '{0} {1}' -f ($_.Username -replace '.*?\\'), $_.Caption }
У меня нет ответа на / Я не понимаю вашего второго вопроса.