函数未处理每一步

时间:2019-04-16 20:01:52

标签: powershell

下面的代码段将跳转到正确的函数“ 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
}

1 个答案:

答案 0 :(得分: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

}