将 if 语句的输出分配给变量 powershell

时间:2021-02-13 18:11:08

标签: powershell

我正在尝试将 if 语句的输出分配给一个变量,我是 Powershell 的新手并且没有牢牢掌握它,任何帮助都会很棒。谢谢!

$Var = if ($Title -eq "Service Route Rep"){
$Department = "Operations"}elseif ($Title -eq "AP Clerk"){
$Department = "Finance"}elseif($Title -eq "Product Development Manager")
$Department = "Operations"}      

$Title = "Service Route Rep"
$Department = "$var"

$user.department = "$Department" 

我收到错误

Set-ADUser : replace
At line:1 char:1
+ Set-ADUser -instance $user
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: (:) [Set-ADUser], 
ADInvalidOperationException
+ FullyQualifiedErrorId : 
ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.SetADUser

2 个答案:

答案 0 :(得分:2)

在这种情况下,您尝试将 $Var 设置为基于条件表达式的值。为此,您必须计算表达式,并返回所需的输出:

$Var = if ($Title -eq 'Service Route Rep'){ 'Operations' }
        elseif ($Title -eq 'AP Clerk'){ 'Finance' }
        elseif ($Title -eq 'Product Development Manager') { 'Operations' } 

在您的代码中,您正在评估表达式,但将 $Department 设置为所需的部门值。这意味着表达式本身正在返回 $null。然后,您取 $Department 的值,并在 $Department = "$var" 行中覆盖它,该行将 $Department 设置为 $null

在这种情况下,我建议您考虑使用 HashTable。这是一种非常常见的模式,因为它更具可读性。

$TitleMap = @{}
$TitleMap.Add('Service Route Rep', 'Operations')
$TitleMap.Add('AP Clerk', 'Finance')
$TitleMap.Add('Product Development Manager', 'Operations')

$Title = "Service Route Rep"
$Department = $TitleMap[$Title]

您可能还会注意到我使用了单引号和双引号,您可以阅读有关 here 的更多信息。

答案 1 :(得分:2)

另一种方法,尤其是当您有更多项目要解码时。

$Var = Switch ($Title){ 
           'Service Route Rep'           { 'Operations' }
           'AP Clerk'                    { 'Finance'    }
           'Product Development Manager' { 'Operations' } 
           Default                 {'Title Not in list!'}
         }

HTH

相关问题