首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Get-ChildItem刷新/更新

Get-ChildItem刷新/更新
EN

Stack Overflow用户
提问于 2012-04-24 07:37:47
回答 1查看 1.8K关注 0票数 1

我是Powershell的新手,希望有人能为我指明正确的方向。我正在尝试弄清楚是否有更干净的方法来完成我下面的工作?当我对第一次调用Get-ChildItem时返回的文件(存储在$items变量中)进行了一些更改后,有没有办法刷新到Get-ChildItem的内容?

在第一个foreach语句中,我为返回的所有文件创建了一个日志签名。完成后,我需要做的是:再次获取列表(因为路径中的项已经更改),第二个Get-ChildItem将包括在第一个Get-ChildItem调用期间找到的文件,以及当第一个foreach语句调用generate- logFiles函数时生成的所有日志文件。所以我的问题是,有没有一种方法可以在不调用get-chilItem两次的情况下更新列表,以及使用两个foreach语句?

谢谢你的帮助!

-这是我根据建议修改的代码

代码语言:javascript
复制
$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

代码语言:javascript
复制
PrintALL filename: fileA.txt
PrintALL filename:
PrintALL filename: fileB.txt
PrintALL filename:
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-24 08:29:00

我不完全清楚你在问什么,可以让generate-LogFile返回创建的日志文件,然后对你的文件和日志文件都调用generateRequestData吗?如下所示:

代码语言:javascript
复制
$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命令:

代码语言:javascript
复制
return Get-Item $logName

此外,在本例中,您不需要使用StreamWriter来写入文件,您可以使用原生powershell Out-File命令:

代码语言:javascript
复制
function generate-LogFile($file)
{
    $logName = $file.FullName + ".log"
    $logName | Out-File $logName
    return Get-Item $logName
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10289795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档