【问题标题】:Powershell: Using Get-ChildItem with variablesPowershell:将 Get-ChildItem 与变量一起使用
【发布时间】:2016-12-21 20:52:34
【问题描述】:

我正在编写一个脚本,它将遍历文件夹,获取文件夹名称的子字符串作为变量值,然后遍历每个文件夹中的日志文件,并从日志文件中获取一些数据以输出到 . .csv 文件。我遇到的问题是使用 Get-ChildItem 和我已经设置的变量。当我自己运行这一行时,它不提供任何值:

#running this to see the value of $files
$files = Get-ChildItem $_.FullName $folder

$files 不包含任何值。

这是脚本的整个部分,供参考和上下文:

#get all folders from the Logs directory    
$folders = Get-ChildItem "C:\Temp\MPOS\Logs"

#iterate through each folder
foreach ($folder in $folders) {

#set substrings of the folder name to variables
$storeNumber = $folder.Name.Substring(2,3)
$date = $folder.Name.Substring(9,7)
#get all files from the current folder being evaluated
$files = Get-ChildItem $_.FullName $folder

#iterate through each file in the current folder
foreach ($file in $files) {

    #set substring of the file name to a variable
    $registerNumber = $file.Name.Substring(12,4)
    #get content of the file
    $logfileContent = Get-Content $file
    #look for all matches of the string "TransactionNumber"
    $transactions = Select-String -InputObject $logfileContent -Pattern "TransactionNumber" -AllMatches
    #count number of matches from above
    $transactionCount = $transactions.Matches.Count

    #below info is creating the object for the .csv
    $transObject = New-Object PSObject

    $transObject | Add-Member -MemberType NoteProperty -Name "StoreNumber" -Value $storeNumber
    $transObject | Add-Member -MemberType NoteProperty -Name "Sales Date" -Value $date
    $transObject | Add-Member -MemberType NoteProperty -Name "RegisterNumber" -Value $registerNumber
    $transObject | Add-Member -MemberType NoteProperty -Name "Transactions" -Value $transactionCount

    $resultsArray += $transObject
    }
}

$resultsArray | Export-Csv C:\Temp\MPOS\MPOSTransactions.csv -NoTypeInformation

【问题讨论】:

  • Get-ChildItem $_.FullName $folder 这实现了什么?
  • @4c74356b41 - 显然没有,没有价值。我想要做的是将 $files 设置为 $folder 中的所有文件。那有意义吗?类似于我将 $folders 设置为“C:\Temp\MPOS\Logs”中包含的所有文件夹的方式。我需要从该目录中的每个文件夹中获取所有文件。我希望这是有道理的。然后我想遍历每个文件并收集数据。我将在我的代码中添加一些 cmets 以提供帮助。
  • $_ 表示“来自管道的当前对象”。您使用的是foreach 语句,而不是ForEach-Object 循环,因此$_ 在您尝试使用它的上下文中没有值。
  • @Bill_Stewart - 谢谢,请问正确的方法是什么?
  • @Bill_Stewart - 明白了,明白了。将其更改为 $folder.FullName - 谢谢!!!

标签: powershell


【解决方案1】:

下面的编辑代码 - 改为 $folder.FullName - 现在可以工作了!

$resultsArray = @()
$folders = Get-ChildItem "C:\Temp\MPOS\Logs"

foreach ($folder in $folders) {

$storeNumber = $folder.Name.Substring(2,3)
$date = $folder.Name.Substring(9,7)
$files = Get-ChildItem $folder.FullName

foreach ($file in $files) {

    $registerNumber = $file.Name.Substring(12,4)
    $logfileContent = Get-Content $file.FullName
    $transactions = Select-String -InputObject $logfileContent -Pattern "TransactionNumber" -AllMatches
    $transactionCount = $transactions.Matches.Count

    $transObject = New-Object PSObject

    $transObject | Add-Member -MemberType NoteProperty -Name "StoreNumber" -Value $storeNumber
    $transObject | Add-Member -MemberType NoteProperty -Name "Sales Date" -Value $date
    $transObject | Add-Member -MemberType NoteProperty -Name "RegisterNumber" -Value $registerNumber
    $transObject | Add-Member -MemberType NoteProperty -Name "Transactions" -Value $transactionCount

    $resultsArray += $transObject
    }
}

$resultsArray | Export-Csv C:\Temp\MPOS\MPOSTransactions.csv -NoTypeInformation

【讨论】:

    猜你喜欢
    • 2019-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多