2017-07-06 14 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

この1との唯一の問題は、私はあなたがあなたの質問でそれを言わなかったそのリスト – 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 
関連する問題