具有嵌入式if语句的PowerShell foreach循环产生“不能接受'True'作为位置参数”

时间:2017-08-14 21:31:30

标签: powershell

我正在尝试编写一个简单的PS行来获取我们设置的特定“区域”的AD组的导出.csv,然后采用GroupScope(通用与全局),并根据范围group,将“department”属性写为“Universal”或“Global”。这样做的原因是帮助识别SharePoint中的两个范围。

$uni="Universal"
Import-csv \\usershare\user\me\output\groups.csv | foreach {Get-ADGroup -Identity $_.Name -Properties * | Set-ADGroup if($_.GroupScope -eq $uni){-replace @{department=$uni}}}

这会返回以下错误消息: “无法找到接受参数'True。'的位置参数。”

我可能在这里错过了一些简单的东西,但我刚刚开始,我主要通过反复试验来自我教学。感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:0)

你使用的if块对你要完成的任务无效,它只会返回True或False,而Set-ADGroup将不知道如何处理错误。

试试这个:

$uni="Universal"
$csv = Import-Csv -Path '\\usershare\user\me\output\groups.csv'
foreach($i in $csv)
{
    if($i.GroupScope -eq $uni)
    {
        Get-ADGroup -Identity $i.Name -Properties 'department' |
            Set-ADGroup -Replace @{department=$uni}
    }
}

我将属性设置为仅拉取部门,因为较小的范围会加快查询速度。