我正在尝试将 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
答案 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