2017-07-06 67 views
0

僅打印列表中的最後一個服務器,我希望得到所有的服務器和打印篩選只打印最後一個服務器列表,我希望所有服務器

$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 

回答

2

$Status不斷被改寫由你列表中的當前機器。

您正在尋找:

$Status+= 

至於反對:

$Status= 

你還需要明確指出$Status將在像這樣開頭的數組:

[email protected]() 

或者當您創建變量並在開始處省略該行時。

[array]$Status += 

否則,你會得到一起運行,因爲它會爲[String]

2

這裏被視爲是一個更PowerShell的類似方法(未測試)結果:

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

這一個唯一的問題是,我需要將其存儲在一個變量,這樣我可以通過電子郵件發送該列表 – user770022

+0

你沒有說你的問題。你說你想在屏幕上看到它們。更新我的答案以導出爲CSV文件(需要PowerShell 3.0或更高版本)。 –

0

另一時髦模式:

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" 
    } 

} 

這是一個函數,你只需要加載,然後你可以啓動它只是使用以下命令:

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