意外的令牌'如果'在表达式或语句powershell中

时间:2014-09-17 22:49:04

标签: powershell csv exchange-server powershell-v3.0 hybrid

我有一个.CSV文件,我正在填写一些AD信息。以下脚本应该在给定用户AD属性上填写“Office”。具有不同“Office”名称的CSV文件中的标题称为“office”。

其他信息:

Exchange 2013 Hybrid Server

Forrest Functional Level = 2003(刚刚降级旧DC的上周)

所有DC现在都是2012 R2。任何建议将不胜感激。

这曾经用于QADuser cmdlet,因此我只是找到了cmdlet /参数等效项并对其进行了更改。

不起作用的新脚本:

Import-CSV d:\scripts\ExchangeExportQuery.csv | ForEach-Object {$myOff = $_.Office if ($_.DistinguishedName -ne $null -and ($_.DistinguishedName.StartsWith("CN=")) ) {Get-User -ResultSize   'unlimited' -identity $_.DistinguishedName | foreach-object { Set-User -identity $_.DistinguishedName -Office $myOff}}}

在旧的Exchange 2007服务器上使用QAD cmdlet实际工作的旧脚本:

Import-CSV d:\scripts\ExchangeExportQuery.csv | ForEach-Object { 
$myOff = $_.Office
if ($_.DN -ne $null -and ($_.DN.StartsWith("OU=")) ) {
    Get-QADUser -SizeLimit 0 -SearchRoot $_.DN | 
        foreach-object { Set-QADUser -identity $_.DN -Office $myOff}

我可能会离开这里,最好从头开始,但任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:3)

问题是语法。在$myOff = $_.Office之后和If (之前,您需要将其设置为多行或插入分号以分隔命令。我的建议如下,或者更容易阅读:

Import-CSV d:\scripts\ExchangeExportQuery.csv | ForEach-Object {
    $myOff = $_.Office 
    if ($_.DistinguishedName -ne $null -and ($_.DistinguishedName.StartsWith("CN=")) ) {
        Get-User -ResultSize   'unlimited' -identity $_.DistinguishedName | foreach-object { 
            Set-User -identity $_.DistinguishedName -Office $myOff
        } #End nested ForEach
    } #End If
} #End Outer ForEach