Zmienna drukowana czcionka Appendendage

1

Mam zmienną $emp oraz indywidualna zmienna folderu dla każdego pracownika w tej zmiennej. Więc mam 1) $GeorgeFullSaveDir i 2) $JamesFullSaveDir. Używać foreach pętla iteruję wartości $emp w celu zmniejszenia / ponownego użycia kodu możliwe jest nie tworzenie indywidualnej zmiennej dla każdego zapisanego pracownika i dołączanie wartości $emp do FullSaveDir? Bezskutecznie próbowałem poniżej

$employees = @('George', 'James')
foreach ($emp in $employees)
{
    $SaveDirRoot = "R:\Employees\"
    $GeorgeSaveDir = "George\"
    $JamesSaveDir = "James\"
    $GeorgeFullSaveDir = $SaveDirRoot+$GeorgeSaveDir
    $JamesFullSaveDir = $SaveDirRoot+$JamesSaveDir

    Write-Host $emp+FullSaveDir
    #Desired output will be
    #R:\Employees\George\ 
    #R:\Employees\James\
}

Dalsze wyjaśnienie - dla każdej iteracji zmiennej $emp Chcę być w stanie dołączyć $emp+FullSaveDir i przedstaw wyniki dla tego konkretnego pracownika. Tak więc z obecną składnią będzie produkowany

1) R: Pracownicy George
2) R: Pracownicy James

user2676140
źródło

Odpowiedzi:

2

Możesz użyć Get-Variable cmdlet, aby odwołać się do zmiennej według jej nazwy:

$employees = 'George', 'James'
$SaveDirRoot = "R:\Employees\"
$GeorgeSaveDir = "George\"
$JamesSaveDir = "James\"
$GeorgeFullSaveDir = $SaveDirRoot+$GeorgeSaveDir
$JamesFullSaveDir = $SaveDirRoot+$JamesSaveDir

foreach ($emp in $employees)
{
    Write-Host (Get-Variable ($emp+'FullSaveDir') -ValueOnly)
}

Ale, IMHO, zamiast używać wielu zmiennych na pracownika, powinieneś przechowywać wszystkie informacje związane z pracownikami w jednym obiekcie:

$employees = @(
    @{
        Name = 'George'
        SaveDir = "George\"
    }
    @{
        Name = 'James'
        SaveDir = "James\"
    }
)
$SaveDirRoot = "R:\Employees\"

foreach ($emp in $employees)
{
    $emp.FullSaveDir = $SaveDirRoot+$emp.SaveDir
}

foreach ($emp in $employees)
{
    Write-Host $emp.FullSaveDir
}
PetSerAl
źródło
Nigdy nie myślałem o przechowywaniu danych w obiekcie, co za świetne rozwiązanie
user2676140