2016-08-16 8 views
-1

johnrizzo1hereのように* nix watchの機能を繰り返そうとしています。暗黙のPowerShell Format-Tableに繰り返し出力用のヘッダーを繰り返す方法を教えてください。

function Watch { 
    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')] 
    param (
     [Parameter(Mandatory=$False, 
        ValueFromPipeline=$True, 
        ValueFromPipelineByPropertyName=$True)] 
     [int]$n = 10, 

     [Parameter(Mandatory=$True, 
        ValueFromPipeline=$True, 
        ValueFromPipelineByPropertyName=$True)] 
     [string]$command 
    ) 
    process { 
     $cmd = [scriptblock]::Create($command); 
     While($True) { 
      Clear-Host; 
      Write-Host "Command: " $command; 
      $cmd.Invoke(); 
      sleep $n; 
     } 
    } 
} 

Export-ModuleMember -function Watch 

watch -n 1 '$PSVersionTable.PSVersion' 

問題は、1回目の実行でのみヘッダーが表示されることです。それは後のヘッダは出力から取り除かれているよう醜い:

Command: $PSVersionTable.PSVersion          
5  0  10586 117 

はリンクwatchに他のすべてのPSのソリューションは、同じ問題に苦しむところで。

答えて

1

これで動作しますが、出力は必ずFormat-Tableにパイプされ、常にTable形式になります。

function Watch { 
    [CmdletBinding(SupportsShouldProcess=$True,ConfirmImpact='High')] 
    param (
     [Parameter(Mandatory=$False, 
        ValueFromPipeline=$True, 
        ValueFromPipelineByPropertyName=$True)] 
     [int]$n = 10, 

     [Parameter(Mandatory=$True, 
        ValueFromPipeline=$True, 
        ValueFromPipelineByPropertyName=$True)] 
     [string]$command 
    ) 
    process { 
     $cmd = [scriptblock]::Create($command) 
     While($True) { 
      Clear-Host 
      Write-Host "Command: " $command 
      $cmd.Invoke() | Format-Table -HideTableHeaders:$false 
      sleep $n 
     } 
    } 
} 

watch -n 1 '$PSVersionTable.PSVersion' 
+0

を変更するとこれは私が明示的にフォーマットを追加することができますアドホックコマンドのために働きます-表。これは汎用コマンドでは機能しません。 –

+0

したがって、テーブルヘッダーは一度書き込まれてから、PowerShellが実際に作成されていない何かを行うために画面をクリアします。 –

+0

これで楽しんでください –

1

ほとんどの場合、これは他の問題を持っていますが、単に私のために

$cmd.invoke(); 

$cmd.invoke() | ft; 

に作品

+0

ScriptBlock(Shawn Estermanが示唆したように)または 'watch'コードの中に' ft'があるはずです。この解決策は受け入れられますが、私にはうまく見えません。 –

+1

ショーンはこの答えを同じものに変更しました。彼は元の解決策を彼の答えに加えるべきです。 –

関連する問題