意外标记';如果';表达式或语句中的powershell

意外标记';如果';表达式或语句中的powershell,powershell,csv,exchange-server,powershell-3.0,hybrid,Powershell,Csv,Exchange Server,Powershell 3.0,Hybrid,我有一个.CSV文件,我正在填充一些广告信息。下面的脚本应该填写给定用户广告属性的“Office”。CSV文件中具有不同“Office”名称的标题称为“Office” 其他资料: Exchange 2013混合服务器 Forrest功能级别=2003(上周刚降级旧dc) 所有DC现在都是2012 R2。如有任何建议,将不胜感激 这用于QADuser cmdlet,因此我只需找到cmdlet/参数等效项并对其进行更改 无法工作的新脚本: Import-CSV d:\scripts\Exchange

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

其他资料:

Exchange 2013混合服务器

Forrest功能级别=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}}}
使用QAD cmdlet在旧exchange 2007服务器上实际运行的旧脚本:

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}

我可能离这里很远,最好从头开始,但如果有任何帮助,我将不胜感激。

问题在于语法。您需要将其设置为多行,或者在
$myOff=$\uOffice
之后和
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