簡體   English   中英

function 中的 Powershell 哈希表無法訪問

[英]Powershell hashtable in function not accessible

我創建了一個 function 來導入 HR 記錄,以便通過索引employeeID 輕松訪問它們。

function hrDataImport {
$HRFile=Import-Csv $rawHRFile #$rawHRFile path previously defined
Write-Host "Creating HR hash table..."
$hrData = @{}
$HRFile | ForEach-Object { $hrData[$_.employeeID] = $_ }
Write-Host "Done. " $hrData.Count
    }

我想在 function 之外使用那個 $hrData 變量。 我無法引用 $hrData['employeeID'],因為我讀到函數中的變量在 function 之外不存在。 我嘗試過的一件事是創建另一個 function 以將 employeeID 傳遞到 $hrData 哈希表中:

function showHRData {
    param ([string]$hrUser)
    $hrData[$hrUser]
}

我將函數放在一個模塊中並成功導入。 我能夠很好地執行 importHRData 但是當我嘗試showHRData -hrUser $employeeID我得到“無法索引到 null 數組”。 似乎 function 看不到之前 function 中的哈希表變量。 我做錯了什么或者你會建議什么,以便我可以跨各種腳本訪問 $hrData 哈希表?

您可以使用$global (或$scriptscope在 function 中創建一個哈希表,如下所示:

function hrDataImport {
    $HRFile = Import-Csv $rawHRFile #$rawHRFile path previously defined
    Write-Host "Creating HR hash table..."
    if (!$hrData) { $Global:hrData = @{} }
    $HRFile | ForEach-Object { $Global:hrData[$_.employeeID] = $_ }
    Write-Host "Done. " $hrData.Count
}

但一般建議避免使用全局(或腳本)scope,主要是因為它可能與當前 scope 中的變量沖突。
為了最大限度地減少這種可能性,我會考慮將您的 function 的責任更改為不僅加載信息而且接收相關的employeeID ,例如:

function Get-EmployeeData ($EmployeeID) {
    if (!$StaticEmployeeData) {
        Write-Host "Creating HR hash table..."
        $HRFile = Import-Csv $rawHRFile #$rawHRFile path previously defined
        $Global:StaticEmployeeData = @{}
        $HRFile | ForEach-Object { $Global:StaticEmployeeData[$_.employeeID] = $_ }
        Write-Host "Done. " $StaticEmployeeData.Count
    }
    $Global:StaticEmployeeData[$employeeID]
}

function showHRData {
    param ([string]$hrUser)
    Get-EmployeeData $hrUser
}

在這種情況下,您可以選擇更具體的全局變量名稱(例如$StaticEmployeeData ,知道 PowerShell 不支持static 變量之類的東西),並且作為額外獎勵,數據僅在您第一次真正需要時才加載(懶惰評價)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM