2017-12-07 7 views
1

私はエラーを起こさなかったので、powershellはこれらのファイルを作成しましたが、それらは空です。何が間違っていたのですか?基本的にOut-File -Append同じであるPSがこれらのtxtファイルに情報を保存しなかったのはなぜですか?

$Services = Get-Service 
Foreach ($Proces in $Services) { 
If($Proces.status -eq "running") { Out-File $Proces >> "C:\proces.txt"} 
If($Proces.status -eq "stopped") { Out-File $Proces >> "C:\proces2.txt"} 
} 
+0

'アウトファイル$ Proces'が実際に何かを書くを使用して.where()方法を使用しての方法です'$ Proces'をファイルしますが、あなたは書き込むコンテンツを提供しませんでした。 'Out-File'は出力を生成しないので、' >> 'を使ってファイルにリダイレクトすると値はありません。ところで、 ''は '' Out-File -Append'のエイリアスです。 – PetSerAl

答えて

1

>> is the append redirect operator、。したがって、Out-Fileを2回呼び出すようなものです。

Out-File $Proces >> "C:\proces.txt"コマンドでは、入力オブジェクトをOut-Fileに渡します。だから、$Procesに空のファイルを書きます。その後、そのコマンドの出力を取り出し(何もしない)、それをC:\proces.txtに書き込むと、2番目の空白ファイルが作成されます。

だからあなたはあなたのコードがちょうどOut-File使用しているOut-File -Appendまたはここ

>>を使用して決めることになるでしょう:

$Services = Get-Service 
Foreach ($Service in $Services) { 
    If ($Service.Status -eq "Running") { $Service >> "C:\proces.txt" } 
    If ($Service.Status -eq "Stopped") { $Service >> "C:\proces2.txt" } 
} 

あり:

ここ
$Services = Get-Service 
Foreach ($Service in $Services) { 
    If ($Service.Status -eq "Running") { Out-File -InputObject $Service -Path "C:\proces.txt" -Append} 
    If ($Service.Status -eq "Stopped") { Out-File -InputObject $Service -Path "C:\proces2.txt" -Append } 
} 

はちょうど>>使用してコードであります何をしようとしている他の多くの方法です

ここ

ここWhere-Objectコマンドレットを使用しての方法ではなく、条件付きループ/

$Services = Get-Service 
$Services | Where-Object {$_.Status -eq "Running"} | Out-File "C:\proces.txt" -Append 
$Services | Where-Object {$_.Status -eq "Stopped"} | Out-File "C:\proces2.txt" -Append 

が分割

$Running,$Stopped = (Get-Service).Where({$_.Status -eq 'Running'},'Split') 
$Running | Out-File "C:\proces.txt" -Append 
$Stopped | Out-File "C:\proces2.txt" -Append 
+0

今は意味があります。ありがとうございました! – dvmvnvq

+0

@ dvmvnvq:受け入れはかなり認められるでしょう。 –

関連する問題