String Literal de Impressão de Anexo Variável

1

Eu tenho uma variável $emp e uma variável de pasta individual para cada funcionário dessa variável. Então eu tenho 1) $GeorgeFullSaveDir e 2) $JamesFullSaveDir . Usando um loop foreach I iterar os valores de $emp para reduzir / reutilizar código, é possível não criar uma variável individual para cada funcionário salvo e acrescentar o valor de $emp a FullSaveDir? Eu tentei sem sucesso o abaixo

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

Mais explicações - para cada iteração da variável $emp , desejo anexar $emp+FullSaveDir e produzir os resultados para esse funcionário específico. Então, com a sintaxe atual, produziria

1) R:\Employees\George\
2) R:\Employees\James\

    
por user2676140 20.12.2015 / 04:09

1 resposta

2

Você pode usar o cmdlet Get-Variable para fazer referência à variável pelo nome:

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

Mas, IMHO, em vez de usar várias variáveis por funcionário, você deve armazenar todas as informações relacionadas a funcionários em um único objeto:

$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
}
    
por 20.12.2015 / 04:54

Tags