Devo estar esquecendo de algo óbvio, essa tarefa não deveria ser tão difícil! Agradeço antecipadamente se você puder me apontar sem rir muito. Estou escrevendo um script de pesquisa de sistema para rodar em cada computador do meu domínio na inicialização via GPO. Cada vez que for executado, ele deve adicionar uma linha com todas as informações coletadas em um arquivo csv em uma unidade compartilhada. Só consigo fazer com que ele produza em colunas.
Código:
$loglocation = "C:\Temp"
$timestamp = Get-Date -UFormat "%Y-%m-%d %H:%M"
$ipaddress = Get-NetIPAddress | fl -Property ipaddress | Out-String -stream |
Select-String 10.15
# Add info to hashtable
$computerinfohastable = [ordered]@{
Timestamp = $timestamp
Hostname = hostname
OSName = (Get-WmiObject Win32_OperatingSystem).Caption
OSVer = (Get-WmiObject Win32_OperatingSystem).Version
IPAddress = ($ipaddress -replace "ipaddress : ").Trim()
}
# Convert to object
$computerinforows = $computerinfohastable.Keys | ForEach-Object {
[PSCustomObject]@{
Property = $_
Value = $computerinfohastable[$_]
}
}
# Output to csv
$computerinforows | Export-Csv -Path "$loglocation\testfile.csv" -
NoTypeInformation -Append
O que eu ganho:
Property Value
Timestamp 11/25/2024 14:23
Hostname #####
OSName Microsoft Windows 11 Enterprise
OSVer 10.0.26100
IPAddress nnn.nnn.nnn.nnn
O que eu quero:
Timestamp Hostname OSName OSVer IPAddress
11/25/2024 14:23 ##### Microsoft Windows 11 Enterprise 10.0.26100 nnn.nnn.nnn.nnn
Tenho pesquisado na internet e tentado vários métodos de transposição, sem sucesso. Agradeço qualquer conselho.
Omitir intermediário
$computerinfohastable = [ordered]@{ … }
, usarSe você insiste em intermediário
$computerinfohastable = [ordered]@{ … }
, use um casting simples como o seguinte:Em ambas as variantes, você deve obter