当前位置: 首页 > 知识库问答 >
问题:

Get-ChildItem刷新/更新

华欣怡
2023-03-14

对Powershell很陌生,希望有人能给我指明正确的方向。我想知道是否有一个更干净的方法来完成我下面的工作?如果我对第一次Get-ChildItem调用时返回的文件(存储在$items变量中)做了一些更改,那么有没有一种方法可以刷新到Get-ChildItem的内容?

在第一个foreach语句中,我为返回的所有文件创建一个日志签名。一旦那样做了,我需要做的是;再次获取列表(因为路径中的项已经更改),第二个Get-ChildItem将包括在第一次Get-ChildItem调用期间找到的文件,以及在第一个foreach语句调用generate-LogFile函数时生成的所有日志文件。所以我的问题是,有没有一种方法可以更新清单,而不必两次调用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提供的fullpath属性,从而使用FullName

PrintALL filename: fileA.txt
PrintALL filename:
PrintALL filename: fileB.txt
PrintALL filename:

共有1个答案

公孙茂学
2023-03-14

我不完全清楚您在问什么,可以让generate-logfile返回创建的日志文件,然后在您的文件和日志文件上调用GenerateRequestData?类似这样的事情:

$items = Get-ChildItem -Path $dataStorePath
foreach ($file in $items)
{
    $logFile = generate-LogFile $file 
    generateRequestData $file
    generateRequestData $logFile
}

编辑:

在添加的示例中,您将从generate-logfile返回一个字符串。.NET字符串没有fullname属性,因此在print-all中不会打印任何内容。若要获取所需的FileInfo对象,请使用Get-Item命令:

return Get-Item $logName
function generate-LogFile($file)
{
    $logName = $file.FullName + ".log"
    $logName | Out-File $logName
    return Get-Item $logName
}
 类似资料:
  • 假设我们有以下目录结构: 现在,假设~ dir00是当前目录。我本以为这两个命令会产生相同的结果。然而,事实并非如此。第二个人的行为是我所期望的。 我正在尝试编写一个小的工具库,用于我们的脚本化流程。我需要编写的一个工具是复制和备份文件集的工具。作为输入,我得到一些信息,告诉我要复制哪些文件/目录等。我无法知道用户可能会提供什么。它们可能会提供通配符,如“*”,它们可能会提供文件名,它们可能会提供

  • 看着,我会数到3 语法Get-ChildItem[[-路径]][[-过滤器]][-排除][强制][包括][名称][递归][UseTransation[]][ Get-ChildItem[[-过滤器]][-排除][强制][包括][名称][递归][]LiteralPath[-UseTransation[]][ Get-ChildItem[-属性][目录][文件][强制][隐藏][只读][系统][Use

  • 我需要从文件中删除封面 调试时,元素已正确删除,但输出封面上的元素仍在此处。 有没有更新/刷新文档xml的方法,即使更改是从低级别发生的,我们如何刷新文档以保持更新

  • 我正在使用HtmlUnit加载一个满是JavaScript的网页。可以很好地执行JavaScript。 但是,当我单击调用Ajax调用的特定表单上的按钮时,即使调用本身完成了,内容(结果)也不会出现在页面上(即使在真正的浏览器中出现了)。

  • Get-ChildItem-排除参数如何工作?它遵循什么规则? Get-Help for Get-ChildItem一点也不详细: 省略指定的项目。此参数的值限定路径参数。输入路径元素或模式,例如“*.txt”。允许使用通配符。 在Stackoverflow和其他方面,普遍的共识似乎是它太难使用,我们都应该通过管道将Get ChildItem的输出传递到Where对象。 虽然我愿意使用Where对

  • 问题内容: 我对/ 有问题。我的数据表未刷新/更新。我正在使用,根据代码,一切都很好,并且没有任何错误。我也有一个带有分页的表,这就是为什么我使用动作监听器和按钮“上一个”和“下一个”的原因。我正在从其他函数传递到在is中的类中编码的函数 。问题是我填充了包含表数据的数组,但是表不会更新/刷新它。这是我的代码。谢谢前进。 大编辑 旧代码已删除。我添加了新代码,可以帮助您了解我的问题。希望这会有所帮