PowerShell:If 语句并在 Import-CSV 中使用空白单元格

PowerShell: If statements and using blank cells in Import-CSV

我在 CSV 文件中使用带有空白单元格的 if 语句时遇到困难。我正在尝试编写一个入职脚本并让它从 xlsx HR 填写中提取信息(IT 将需要的行复制到脚本中使用的 CSV 中)。为了获得 OU 路径,我使用了部门名称。但是,有些用户有子部门,有些则没有,这些字段在 HR 发送的 xlsx 中留空。我通过在这些字段中输入 N/A 使其工作,但是如果其他技术不知道在 CSV 文件中执行此操作,脚本将失败。所以我想让它与空白字段一起使用。

这就是我在 CSV 字段中不使用 N/A 时的尝试

foreach ($obj in $onboardcsv){

$dep = "$($obj.department)"
$sdep = "$($obj.subDepartment)"

if ($null -eq $obj.subDepartment){
        $ou = Get-ADOrganizationalUnit -Filter {name -like $dep} -SearchBase "OU=User,OU=OU,DC=DOMAIN,DC=com"
}

else{
        $ou = Get-ADOrganizationalUnit -Filter {name -like $sdep} -SearchBase "OU=User,OU=OU,DC=DOMAIN,DC=com"  
    }

如有任何帮助,我们将不胜感激!

要重新表述您的问题,您只想搜索 SubDepartment 不为空的地方?

在不修改太多代码的情况下,可以利用[string]class中提供的::IsNullOrWhiteSpace()静态方法来求空:

  • 使用-Not反转[string]::IsNullOrWhiteSpace($obj.subDepartment)的结果。
foreach ($obj in $onboardcsv)
{
    $department = if (-not [string]::IsNullOrWhiteSpace($obj.subDepartment)) {
        $obj.subDepartment
    }
    else {
        $obj.department
    }
    Get-ADOrganizationalUnit -Filter "Name -like '$department'" -SearchBase "OU=User,OU=OU,DC=DOMAIN,DC=com" 
}

因此,首先针对子部门进行测试,如果$obj.subDepartment不是null,则将其分配给$department.这将允许两个属性只使用一个变量,而无需复制代码。


感谢 @Santiago 进行完整性检查

像这样的东西会起作用。

$ou = "searching by sub department"

$department = if (!($user.subDepartment)) {
        #subdepartment is blank
        #searching by department
        $ou = "searching by department"
    }

$ou