如果使用csv在ForEach中声明

时间:2012-11-28 21:40:47

标签: powershell csv if-statement foreach

我们使用PowerShell在Active Directory中自动创建学生用户。除了enable-mailbox之外,我们一切正常。我们只向中学生提供电子邮件地址。因此,我试图让脚本读取csv,并且只为中学生启用了post-mailbox。我们所有的中学都有不到100的校园数,所以我试着让脚本使用ForEach然后如果$ _.extensionAttribute1(带有校园号的csv中的列)小于100,那么它将邮件启用帐户。我遇到的问题是只处理第一个用户并结束脚本。我希望它贯穿csv中的每一行。这是我的剧本。

add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010

Import-CSV C:\scripts\updateuser.csv | ForEach {
    $campus =$_.extensionAttribute1
    If ($campus -lt '100') {
    Enable-Mailbox -Identity $_.sAMAccountName -Database NISDSRV6DB1
    }}

您可以提供任何帮助以使其贯穿整个csv的任何帮助将不胜感激。 提前感谢您的帮助。

编辑...我正在搞乱csv文件,我得到了一些有趣的结果。此脚本显示任何内容的唯一方法是,如果extensionAttribute1字段填充了1,我试图让所有小于100的用户。

3 个答案:

答案 0 :(得分:0)

尝试在变量赋值的末尾添加;

$campus =$_.extensionAttribute1;

答案 1 :(得分:0)

您的'extensionAttribute1'值未在'if'语句中正确转换为整数。试试这个:

add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010

Import-CSV C:\scripts\updateuser.csv | ForEach {
    $campus =$_.extensionAttribute1 -as [Int]
    if ($campus -lt '100'){
        Write-Host $_.sAMAccountName            
        Enable-Mailbox -Identity $_.sAMAccountName -Database NISDSRV6DB1
    }
}

答案 2 :(得分:0)

我已经弄清楚了。我的中学校园号码分别是1,7,10,42,43,44,45和46.我只会认识到数字是一个(奇怪)。如果我在每个数字前加0到3位数,它就会识别它们。 001,007,010,042,043,044,045和046可以工作并被识别为小于100.还没有找到推理,但我现在需要调整我的csv导出过程来解释这个数字方案