Powershell:将Get-ChildItem与变量一起使用

问题描述 投票:0回答:1

我正在编写一个脚本,它将遍历文件夹,将文件夹名称的子字符串作为变量值,然后遍历每个文件夹中的日志文件,并从日志文件中获取一些数据,以便输出到.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
powershell
1个回答
0
投票

下面编辑的代码 - 更改为读取$ 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
© www.soinside.com 2019 - 2024. All rights reserved.