Powershell 很新,希望有人能指出我正确的方向。我试图弄清楚是否有更清洁的方法来完成我下面的内容?一旦我对第一次 Get-ChildItem 调用期间返回的文件(存储在 $items 变量中)进行了一些更改,有没有办法刷新 Get-ChildItem 的内容?
在第一个 foreach 语句中,我为所有返回的文件创建了一个日志签名。一旦完成,我需要做的是;再次获取列表(因为路径中的项目已更改),第二个 Get-ChildItem 将包括在第一次 Get-ChildItem 调用期间找到的文件以及在第一个 foreach 语句调用时生成的所有日志文件生成日志文件功能。所以我的问题是,有没有一种方法可以更新列表而不必调用 get-chilItem 两次,以及使用两个 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 中有两个文件:fileA.txt & fileB.txt
我将创建两个附加文件 fileA.txt.log 和 fileB.txt.log
最终我需要对所有四个文件做点什么。我创建了一个 print-All 函数,我将在其中处理所有四个文件。下面是当前的输出。可以看出,我只得到找到的两个原始文件的输出,而不是另外创建的两个(调用 print-All($log) 时得到空行)。我需要能够使用 Get-ChildItem 提供的完整路径属性,因此使用 FullName
PrintALL filename: fileA.txt
PrintALL filename:
PrintALL filename: fileB.txt
PrintALL filename: