1

У меня есть переменная $emp и отдельная переменная папки для каждого сотрудника в этой переменной. Итак, у меня есть 1) $GeorgeFullSaveDir и 2) $JamesFullSaveDir . Используя цикл foreach я итерирую значения $emp , чтобы уменьшить / повторно использовать код. Можно ли создать отдельную переменную для каждого сотрудника saveir и добавить значение $emp к FullSaveDir? Я неудачно попробовал ниже

$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\
}

Дальнейшее объяснение - для каждой итерации переменной $emp я хочу иметь возможность добавлять $emp+FullSaveDir и получать результаты для этого конкретного сотрудника. Так что с текущим синтаксисом это будет производить

1) Р:\ Сотрудники \ Георгий \
2) Р:\ Сотрудники \ Джеймс \

1 ответ1

2

Вы можете использовать командлет Get-Variable для ссылки на переменную по ее имени:

$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)
}

Но, IMHO, вместо использования нескольких переменных на сотрудника вы должны хранить всю информацию, связанную с сотрудником, в одном объекте:

$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
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .