Precisa formatar a saída do shell de energia

2
Sou muito novo no powershell e tenho tentado várias maneiras de dividir os resultados do seguinte script PowerShell que encontrei, mas que não tive sorte. No momento, o script lista tudo em 4 colunas sem intervalo entre os resultados de cada servidor.

(quando terminar com os resultados de um servidor, eu gostaria de um intervalo ou mesmo um cabeçalho com o nome do servidor entre cada resultado para facilitar a leitura quando executado em vários servidores)

qualquer ajuda para obter este formato seria apreciada.

Get-WmiObject -ComputerName ("server1","server2") Win32_UserProfile | % {
  $userinfo = [WMI] ($_.__Path -Replace "Win32_UserProfile", "Win32_SID")
  New-Object PsObject -Property @{
    ComputerName= $_.__Server 
    Domain      = $userinfo.ReferencedDomainName
    User        = $userinfo.AccountName
    LastUsed    = $_.ConvertToDatetime($_.LastUseTime)

  }
} | export-csv -NoType c:\Results.csv
    
por MJT 25.09.2014 / 23:19

1 resposta

1

Suponho que, quando você diz que deseja uma saída "mais fácil de ler", quer dizer que deseja facilitar a leitura da saída no console, e não nesse arquivo CSV. Porque os arquivos CSV não devem ser bonitos ou fáceis para os humanos lerem - os arquivos CSV são fáceis de serem processados pelos computadores.

Assim, acabei de ignorar o cmdlet Export-CSV no final. Na minha opinião, obter bons resultados de console e obter dados CSV eficientes são dois objetivos totalmente separados.

Quando executo seu script, a saída é assim:

User            ComputerName    Domain          LastUsed             
----            ------------    ------          --------             
Ryan            SERVER1         SERVER1         9/25/2014 11:53:54 PM
NETWORK SERVICE SERVER1         NT AUTHORITY    9/25/2014 11:53:54 PM
LOCAL SERVICE   SERVER1         NT AUTHORITY    9/25/2014 11:53:54 PM
SYSTEM          SERVER1         NT AUTHORITY    9/25/2014 11:53:54 PM
Ryan            SERVER2         SERVER2         9/25/2014 11:53:54 PM
NETWORK SERVICE SERVER2         NT AUTHORITY    9/25/2014 11:53:54 PM
LOCAL SERVICE   SERVER2         NT AUTHORITY    9/25/2014 11:53:54 PM
SYSTEM          SERVER2         NT AUTHORITY    9/25/2014 11:53:54 PM

Vejo o que você quer dizer sobre o console não separar ou colocar qualquer "intervalo" entre cada computador.

Então fiz algumas modificações no seu script:

:NextComputer Foreach ($Computer In "localhost", "localhost")
{
    Write-Host "                                      " -ForegroundColor Green -BackgroundColor Black
    Write-Host " Massive Flashy Header For $Computer! " -ForegroundColor Green -BackgroundColor Black
    Try
    {
        $Profiles = Get-WMIObject -ClassName Win32_UserProfile -ComputerName $Computer -ErrorAction Stop
    }
    Catch
    {
        Write-Error "Error while getting user profiles from $Computer': $($_.Exception.Message)"
        Continue NextComputer
    }    
    Write-Host " User profiles found: $($Profiles.Count)               " -ForegroundColor Green -BackgroundColor Black
    If ($Profiles.Count -LT 1)
    {
        Continue NextComputer
    }
    $ProfileCollection = @()
    :NextProfile Foreach ($Profile In $Profiles)
    {
        $UserInfo = [WMI] ($Profile.__PATH -Replace "Win32_UserProfile", "Win32_SID")
        $ProfileCollection += New-Object PsObject -Property @{
            ComputerName = $Computer 
            Domain       = $UserInfo.ReferencedDomainName
            User         = $UserInfo.AccountName
            LastUsed     = $Profile.ConvertToDatetime($Profile.LastUseTime)
        }
    }
    $ProfileCollection | Format-Table -AutoSize
}

E agora a saída parece um pouco mais legível, já que os resultados de cada computador agora estão separados um do outro:

 Massive Flashy Header For SERVER1! 
 User profiles found: 4               

User            ComputerName Domain          LastUsed             
----            ------------ ------          --------             
Ryan            SERVER1      SERVER1         9/25/2014 11:56:50 PM
NETWORK SERVICE SERVER1      NT AUTHORITY    9/25/2014 11:56:50 PM
LOCAL SERVICE   SERVER1      NT AUTHORITY    9/25/2014 11:56:50 PM
SYSTEM          SERVER1      NT AUTHORITY    9/25/2014 11:56:50 PM



 Massive Flashy Header For SERVER2! 
 User profiles found: 4               

User            ComputerName Domain          LastUsed             
----            ------------ ------          --------             
Ryan            SERVER2      SERVER2         9/25/2014 11:56:50 PM
NETWORK SERVICE SERVER2      NT AUTHORITY    9/25/2014 11:56:50 PM
LOCAL SERVICE   SERVER2      NT AUTHORITY    9/25/2014 11:56:50 PM
SYSTEM          SERVER2      NT AUTHORITY    9/25/2014 11:56:50 PM

Mais ao seu gosto, sim?

    
por 26.09.2014 / 06:59

Tags