Come recuperare l'indirizzo IP e lo stato dei servizi da un elenco di hostname nel file TXT


1

Voglio aggiungere l'indirizzo IP nella tabella in cui viene recuperato lo stato dei servizi dell'elenco di nomi host salvati nel file TXT. Un host può contenere più di un servizio. Il nome di servizi inizia con I. Come lo faccio

 $servers=Get-Content c:\servers.txt
    $servers|Foreach-Object{Get-Service -ComputerName $_ -Name I*}  | Select-Object -Property  ServiceName, Status | ConvertTo-Html -Head $htmlhead | Out-String

Potresti modificare la tua domanda e fornire maggiori dettagli su ciò che vuoi ottenere? Inoltre, presumo che la tua lista di nomi host sia contenuta nella variabile $ servers? Hai già alimentato una variabile con IP? La mia ipotesi sarebbe quella di andare per un oggetto / array personalizzato contenente le informazioni sugli IP e sui servizi ...
Ob1lan

1
Ho scriptato in modo che lo stato dei servizi venga inviato tramite la posta, l'unica cosa di cui ho bisogno per aggiungere l'indirizzo IP dei diversi nomi host nella tabella che sto inviando, un host può contenere più di un servizio
Zorro

1
Non voglio dare array personalizzati di IP. Anche se aggiungo un nuovo hostname nel mio file, voglio recuperare lo stato anche di questo
Zorro

Non stavo parlando di un array statico di IP. Si prega di verificare la mia risposta proposta, in cui utilizzo un array e un oggetto PS personalizzato per creare una tabella personalizzata contenente le informazioni richieste.
Ob1lan

Risposte:


1

Sulla base dei tuoi commenti, ecco lo script che userei per uno scenario del genere:

# Gettings the server list from text file
$servers = Get-Content c:\servers.txt

# Creating an empty array
$array = @()

# Starting the loop for each server in the list
foreach ($server in $servers) 
{
    # Getting the server's IP. Other methods could apply
    $IP = [System.Net.Dns]::GetHostAddresses("$server").IPAddressToString

    # Getting the list of services
    $services = Get-Service -ComputerName $server -Name I*

    # Starting the loop for each service in the list
    foreach ($service in $services)
    {
        # Creating a new PS object and adding values
        $Object = New-Object PSObject
        $Object | Add-Member -MemberType NoteProperty -Name "Hostname" -Value $server
        $Object | Add-Member -MemberType NoteProperty -Name "IP" -Value $IP
        $Object | Add-Member -MemberType NoteProperty -Name "Service" -Value $service.Name
        $Object | Add-Member -MemberType NoteProperty -Name "Status" -Value $service.Status

        #Feeding the array with the values
        $array += $Object
    }
}

# Now converting the array to HTML
$array | ConvertTo-Html -Head $htmlhead | Out-String

Nella console, l'array $ si espanderebbe in questo modo:

enter image description here

Si prega di provare e facci sapere se è adatto alle tue necessità. Potrebbe essere necessario adattarsi in base al proprio ambiente.

Spero che questo ti aiuti !


Potresti anche usare il Powershell nativo Resolve-DnsName cmd-lascia invece del [System.Net.Dns] classe. $servers | ForEach-Object {(Resolve-DnsName $_).IpAddress}
Smeerpijp

@MrPowerUser infatti, ma a seconda della versione di PowerShell posseduta dall'utente, questo cmdlet potrebbe non essere disponibile.
Ob1lan

Questo non mi preleva indirizzo IPv4 giusto? Ho bisogno di IPv4 solo così sto usando il comando test-connection, c'è anche un modo per recuperare i nomi dei servizi da un altro file TXT invece di usare I *. Ad esempio: ho un nome host in un file e il servizio per quel nome host in un altro file, inserirò sia il nome host che i servizi nello stesso ordine
Zorro
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.