2017-07-06 7 views
0

Ce imprime le dernier serveur dans la liste, je suis à la recherche d'obtenir tous les serveurs et impression à l'écranimprime le dernier serveur dans la liste, je veux tous les serveurs

$machines = (Get-BrokerMachine -AdminAddress $adminaddress -DesktopGroupName $deliverygroup | Select-Object DNSname).DNSname 

foreach($machine in $machines){ 

$machinelist = Get-BrokerMachine -HostedMachineName $machine 
    if($machinelist.InMaintenanceMode -eq $true){ 
     $status = "$machine is in maintenance mode" 
     }else { 
     $status = "$machine is not in maintenance mode" 
     } 

} 
Write-Host $status 

Répondre

2

$Status est constamment écrasé par la machine actuelle dans votre liste.

Vous cherchez:

$Status+= 

Contrairement à:

$Status= 

Vous devrez également indiquer explicitement que $Status sera un tableau au début comme si :

[email protected]() 

Ou lorsque vous créez la variable et omettez la ligne au début.

[array]$Status += 

Sinon, vous obtiendrez des résultats qui fonctionnent ensemble comme il sera traité comme un [String]

2

Voici une démarche plus PowerShell (non testé):

Get-BrokerMachine -AdminAddress $adminaddress -DesktopGroupName $deliverygroup | ForEach-Object { 
    $machineName = $_.DNSName 
    [PSCustomObject] @{ 
    "MachineName"  = $machineName 
    "MaintenanceMode" = (Get-BrokerMachine -HostedMachineName $machine).InMaintenanceMode 
    } 
} | Export-Csv "C:\whatever\results.csv" -NoTypeInformation 
+0

Le seul problème avec celui-ci est que je dois stocker dans une variable afin que je puisse envoyer un courriel cette liste – user770022

+0

Vous ne dites pas que dans votre question. Vous avez dit que vous vouliez les voir sur l'écran. Mise à jour de ma réponse pour exporter vers un fichier CSV (nécessite PowerShell 3.0 ou plus récent). –

0

un autre mode funky:

function get-BrokerMachineMode 
{ 
    param (
     [Parameter(Mandatory = $true)] 
     [string[]]$machines 
    ) 
    begin 
    { 
     $ErrorActionPreference = 'Stop' 
     Add-Type -Language CSharp @" 
public class BrokenBroker { 
     qpublic System.String MachineName; 
     public System.String MaintenanceMode; 

public BrokenBroker (string MachineName, string MaintenanceMode) 
    { 
     this.MachineName = MachineName; 
     this.MaintenanceMode = IsInMaintenanceMode; 
    } 
} 
"@ 

     $status = @() 
     Write-Verbose "Created objects..." 
    } 
    process 
    { 
     try 
     { 
      $machines = (Get-BrokerMachine -AdminAddress $adminaddress ` 
              -DesktopGroupName $deliverygroup | Select-Object DNSname).DNSname 

      foreach ($machine in $machines) 
      { 
       Write-Verbose "Checking machine: $machine" 

       $machinelist = Get-BrokerMachine -HostedMachineName $machine 

       if ($machinelist.InMaintenanceMode -eq $true) 
       { 
        $status += New-Object BrokenBroker($machine, $true) 
       } 
       else 
       { 
        $status += New-Object BrokenBroker($machine, $false) 
       } 

      } 
     } 
     catch 
     { 
      Write-Error $error[0].Exception.Message 
     } 
     $status 
    } 
    end 
    { 
     Write-Verbose "Done" 
    } 

} 

c'est une fonction que vous devez juste charger puis vous pouvez lancer juste en utilisant cette commande:

$computers = get-content = {PATH TO TXT FILE} 
$list = get-BrokerMachineMode -machines $computers -Verbose