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 ответ:
Вы можете удалить доменное имя, используя
regex
, который заменяет все до и включая\
:'.*?\\'
Вы избавляетесь от заголовка, используя
select -expand
или используя цикл foreach, где вы выбираете свойства, используя$_.PROPERTY
Таким образом, ваше утверждение может выглядеть следующим образом:
У меня нет ответа на / Я не понимаю вашего второго вопроса.$Uinfo = gwmi win32_computersystem -comp $computer | foreach { '{0} {1}' -f ($_.Username -replace '.*?\\'), $_.Caption }