PowerShell para reformatar o conteúdo do arquivo

votos
30

Eu tenho um script que recebe o conteúdo de um arquivo e verifica por seu ip. Então que é adicionado para algum outro arquivo de texto.

[System.Collections.ArrayList]$hlist1 = Get-Content -Path C:\Timezone\Update\host.txt
$hiplist = New-Object System.Collections.ArrayList
$hlist2 = New-Object System.Collections.ArrayList
ForEach ($h in $hlist1)
{
 $hip = Resolve-DnsName $h
 $hiplist.Add($hip)
}
 $hiplist | Out-File C:\Timezone\Update\hiplist.txt

O arquivo que está sendo criado é como mostrado abaixo:

             ----                         ----   ---   -------    --------
        WIN-JB2A2FS84MQ.domain.com        A      1200  Answer     10.3.0.4
                                                                   8       
        WIN-QP0BH4SD2H9.domain.com        A      1200  Answer     10.3.1.1
                                                                   9       

Eu preciso:

  1. livrar-se dos primeiros -------- linhas.
  2. obter todo o ip na mesma linha (10.3.0.10)

Já experimentou Format-Table -AutoSize, então Selecione -skip 1 etc, mas sem sorte.

Como isso pode ser alcançado.? Por favor, note que o código funciona bem como esperado quando ele é executado manualmente, mas joga esta questão quando executado usando agendador de tarefas.

Editar com base na resposta de Matt

Agora o arquivo de texto contém:

Address,IPAddress,QueryType,IP4Address,Name,Type,CharacterSet,Section,DataLength,TTL
10.3.0.48,10.3.0.48,A,10.3.0.48,WIN-JB2A2FS84MQ.domain.com,A,Unicode,Answer,4,1200
10.3.1.19,10.3.1.19,A,10.3.1.19,WIN-QP0BH4SD2H9.domain.com,A,Unicode,Answer,4,1200

Peter-sal saída de resposta:

Name                            Type   TTL   Section    IPAddress                                
----                            ----   ---   -------    ---------                                
WIN-JB2A2FS84MQ.domain.com        A      1200  Answer     10.3.0.48
WIN-QP0BH4SD2H9.domain.com        A      1200  Answer     10.3.1.19

Mas, novamente em cima do nome há um espaço. Preciso apagar tudo presente antes WIN-JB2 .....

Publicado 06/10/2015 em 10:13
usuário
Em outras línguas...                            


1 respostas

votos
2

Eu não posso testar perfeitamente, mas eu gostaria de voltar a um comentário anterior da mina. Resolve-DNSNameretorna objetos assim que sua saída é melhor destinado para algo objeto consciente. Export-CSVdeve ser preferível aqui.

$hlist1 = Get-Content -Path "C:\Timezone\Update\host.txt"
$hlist1 | ForEach-Object{Resolve-DnsName $_} | 
    Export-Csv "C:\Timezone\Update\hiplist.txt" -NoTypeInformation

Eu normalmente não gosto disso, mas se você preferir, você deve ser capaz de usar a Format-tablesaída agora. Este parece ser mais em linha com o que você está procurando.

$hlist1 = Get-Content -Path "C:\Timezone\Update\host.txt"
$hlist1 | ForEach-Object{Resolve-DnsName $_} | 
    Format-Table -HideTableHeaders | Select-Object -Skip 1 |
    Out-File "C:\Timezone\Update\hiplist.txt" -Width 200

Talvez você prefira que a produção. O cabeçalho deverá ser removido agora, bem como uma linha em branco no início.

Isso cria algum espaço em branco antes e depois da saída. solução simples é para embrulhar que em umTrim()

$hlist1 = Get-Content -Path "C:\Timezone\Update\host.txt"
$results = ($hlist1 | ForEach-Object{Resolve-DnsName $_} |
    Format-Table -HideTableHeaders | 
    Out-string).Trim()`
$results | Out-File "C:\Timezone\Update\hiplist.txt" -Width 200`
Respondeu 06/10/2015 em 10:35
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more