功能不处理每一步

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

下面的代码片段将跳转到正确的函数“ORD_LOG_PROCESS”,它将CD转到路径,但之后不会存储变量。 $ ordfiles以及之后的每个变量都不存储。 $ ordlogpath目录中有一个文件,如果我在shell上执行(gci $ ordlogpath |%{$ _。name})它可以工作,但由于某种原因它不会存储脚本。

$ordlogpath = "C:\test_environment\ORD_REPO\ORD_LOGS\"
$ordlogexist = gci "C:\test_environment\ORD_REPO\ORD_LOGS\*.log"


FUNCTION ORD_LOG_PROCESS
{
cd $ordlogpath
$ordfiles = (gci $ordlogpath |% {$_.name})
FOREACH ($ordfile in $ordfiles)
{
$ordlogimport = Import-Csv $ordfile
$ordloggrep = $ordfile
exit
}
}

FUNCTION NO_FILES

{
write-host "NO FILES TO PROCESS"
EXIT
}

IF (!$ordlogexist)

{
NO_FILES
}

else

{
ORD_LOG_PROCESS
}
powershell
1个回答
1
投票

如果在函数内声明变量,它们将是该函数的本地变量。这意味着变量不存在于函数之外。

但那么..为什么要使用这样的功能呢? 难道你不能简单地做下面的事情吗?

$ordlogpath  = "C:\test_environment\ORD_REPO\ORD_LOGS\*.log"

if (!(Test-Path -Path $ordlogpath)) {
    Write-Host "NO FILES TO PROCESS"
}
else {
    Get-ChildItem -Path $ordlogpath -File | ForEach-Object {
        $ordlogimport = Import-Csv $_.FullName
        # now do something with the $ordlogimport object, 
        # otherwise you are simply overwriting it with the next file that gets imported..
        # perhaps store it in an array?

        # it is totally unclear to me what you intend to do with this variable..
        $ordloggrep = $_.Name
    }

    Write-Host "The log name is: $ordloggrep"
    Write-Host
    Write-Host 'The imported variable ordlogimport contains:'
    Write-Host

    $ordlogimport | Format-Table -AutoSize

}
© www.soinside.com 2019 - 2024. All rights reserved.