Powershellはかなり新しく、誰かが私を正しい方向に向けることができることを望んでいます。私が以下に持っていることを達成するためのよりクリーンな方法があるかどうかを理解しようとしていますか?最初のGet-ChildItem呼び出し($ items変数に格納されている)中に返されるファイルにいくつかの変更を加えた後、Get-ChildItemの内容を更新する方法はありますか?
最初のforeachステートメントで、返されるすべてのファイルのログ署名を作成しています。それが終わったら、私がする必要があるのは; リストをもう一度取得すると(パス内のアイテムが変更されたため)、2番目のGet-ChildItemには、最初のGet-ChildItem呼び出し中に見つかったファイルと、最初のforeachステートメントが呼び出されたときに生成されたすべてのlogFilesの両方が含まれます。 generate-LogFile関数。だから私の質問ですが、get-chilItemを2回呼び出さずにリストを更新し、2つのforeachステートメントを使用する方法はありますか?
すべての助けをありがとう!
--------------これは私が推奨に基づいてコードを変更したものです--------------
$dataStorePath = "C:\Process"
function print-All($file)
{
Write-Host "PrintALL filename:" $file.FullName #Only prints when print-All($item) is called
}
function generate-LogFile($file)
{
$logName = $file.FullName + ".log"
$logFilehandle = New-Object System.IO.StreamWriter $logName
$logFilehandle.Writeline($logName)
$logFilehandle.Close()
return $logName
}
$items = Get-ChildItem -Path $dataStorePath
foreach ($item in $items)
{
$log = generate-LogFile($item) #Contains full path C:\Process\$fileName.log
print-All($item)
print-All($log) #When this goes to the function, nothing prints when using $file.FullName in the print-All function
}
- - - - -出力 - - - - - - -
テストのために、C:\ Processに2つのファイルがあります:fileA.txtとfileB.txt
2つの追加ファイルfileA.txt.logとfileB.txt.logを作成します
最終的には、4つのファイルすべてで何かをする必要があります。4つのファイルすべてを処理するprint-All関数を作成しました。以下は現在の出力です。ご覧のとおり、追加で作成された2つのファイルではなく、見つかった2つの元のファイルの出力のみを取得します(print-All($ log)を呼び出すときに空白行を取得します)。Get-ChildItemによって提供されるフルパスプロパティを使用できるようにする必要があるため、FullNameを使用します
PrintALL filename: fileA.txt
PrintALL filename:
PrintALL filename: fileB.txt
PrintALL filename: