powershellif-statementread-host

Changing a variable based on output


Good Afternoon, Just want to start by saying I am totally new with PS, and am really sorry if my approach to this is long winded or inaccurate.

I have a list of computernames that declared as individual Variables that my colleagues have provided me :

$Jon = "Abc1234"
$Mike = "Abc6789"

I then ask the user if they want to send the files to another PC :

$Targetuser = Read-Host 'Who would you like to send it to?'

What I would like is the output from the above to change to the hostname, but I am unsure of how to do this. Essentially, if the output was Mike, to change the $targetuser variable to $Abc6789

Thanks in advance


Solution

  • Dynamically named variables is almost always a bad idea. Instead, use a dictionary type, like a hashtable:

    # Define user->host dictionary
    $Hostnames = @{
      Jon  = "Abc1234"
      Mike = "Abc6789"
    }
    
    # Ask user for target user
    $TargetUser = Read-Host 'Who would you like to send it to?'
    
    # Keep asking until the enter an actual user name
    while(-not $Hostnames.ContainsKey($TargetUser)){
      Write-Host "No hostname found for user '${targetUser}'!"
      Write-Host "Choose one of:"
      Write-Host ($Hostnames.Keys -join "`n")
      $TargetUser = Read-Host 'Who would you like to send it to?'
    } 
    
    # Get the associated hostname
    $TargetHost = $Hostnames[$TargetUser]
    
    # copy file to $TargetHost