[英]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
(或$script
) scope在 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.