Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 批量Azure广告更新_Powershell_Azure Ad Powershell V2 - Fatal编程技术网

Powershell 批量Azure广告更新

Powershell 批量Azure广告更新,powershell,azure-ad-powershell-v2,Powershell,Azure Ad Powershell V2,我已经写了一个脚本来更新Azure广告中用户的联系信息。我使用的CSV是从我们本地广告中导出的。我找到了一些示例作为起点,这就是我破解出来的 Start-Transcript "transcript.log" # Connect to AzureAD Connect-AzureAD # Get CSV content $CSVrecords = Import-Csv userexport.csv -Delimiter "," # Create arr

我已经写了一个脚本来更新Azure广告中用户的联系信息。我使用的CSV是从我们本地广告中导出的。我找到了一些示例作为起点,这就是我破解出来的

Start-Transcript "transcript.log"

# Connect to AzureAD
Connect-AzureAD

# Get CSV content
$CSVrecords = Import-Csv userexport.csv -Delimiter ","

# Create arrays for skipped and failed users
$SkippedUsers = @()
$FailedUsers = @()

# Loop trough CSV records
foreach ($CSVrecord in $CSVrecords) {
    $upn = $CSVrecord.samaccountname + "@daytonrogers.com"
    $user = Get-AzureADUser -Filter "userPrincipalName eq '$upn'"
    if ($user) {
        $command = "Set-AzureADUser -ObjectID $($user.objectid) "
        if ($CSVrecord.title) {$command = "$command -jobtitle '$($CSVrecord.title)'"}
        if ($CSVrecord.department) {$command = "$command -department '$($CSVrecord.department)'"}
        if ($CSVrecord.office) {$command = "$command -PhysicalDeliveryOfficeName '$($CSVrecord.office)'"}
        if ($CSVrecord.officephone) {$command = "$command -TelephoneNumber '$($CSVrecord.officephone)'"}
        if ($CSVrecord.fax) {$command = "$command -FacsimileTelephoneNumber '$($CSVrecord.fax)'"}
        if ($CSVrecord.mobilephone) {$command = "$command -Mobile '$($CSVrecord.mobilephone)'"}
        if ($CSVrecord.streetaddress) {$command = "$command -streetaddress '$($CSVrecord.streetaddress)'"}
        if ($CSVrecord.city) {$command = "$command -city '$($CSVrecord.city)'"}
        if ($CSVrecord.state) {$command = "$command -state '$($CSVrecord.state)'"}
        if ($CSVrecord.postalcode) {$command = "$command -postalcode '$($CSVrecord.postalcode)'"}
        Write-Information $command
        try{
            $command
        } catch {
            $FailedUsers += $upn
            Write-Warning "$upn user found, but FAILED to update."
            }
        }
        else {
            Write-Warning "$upn not found, skipped"
            $SkippedUsers += $upn
        }
}
Stop-Transcript
它运行和构建命令非常好。但是,没有一个用户得到更新。如果我从transcript.log文件中复制/跳过该命令,它就会工作。如果我从PowerShell命令行运行脚本,它就是不起作用


我在这里遗漏了什么?

创建命令字符串,然后执行它们,我认为这会导致不好的做法。您必须求助于
调用表达式
。这是我们想要避免的。我将用您的参数构建一个哈希表,并从中使用,您可以构建命令字符串以发送到信息流。请参见下面的示例

if ($user) {
    $command = "Set-AzureADUser"
    $params = @{}
    $params.ObjectID = $user.objectid
    if ($CSVrecord.title) {$params.jobtitle = $CSVrecord.title}
    if ($CSVrecord.department) {$params.department = $CSVrecord.department}
    if ($CSVrecord.office) {$params.PhysicalDeliveryOfficeName = $CSVrecord.office}
    if ($CSVrecord.officephone) {$params.TelephoneNumber = $CSVrecord.officephone}
    if ($CSVrecord.fax) {$params.FacsimileTelephoneNumber = $CSVrecord.fax}
    if ($CSVrecord.mobilephone) {$params.Mobile = $CSVrecord.mobilephone}
    if ($CSVrecord.streetaddress) {$params.streetaddress = $CSVrecord.streetaddress}
    if ($CSVrecord.city) {$params.city = $CSVrecord.city}
    if ($CSVrecord.state) {$params.state = $CSVrecord.state}
    if ($CSVrecord.postalcode) {$params.postalcode = $CSVrecord.postalcode}
    Write-Information "$command $($params.GetEnumerator() |% {"-{0} '{1}'" -f $_.Key,$_.Value})"
    & $command @params
}

输出命令字符串不会调用它。你需要以某种方式调用它。您可以尝试使用call操作符
和$command
。我也这么想,找到了Invoke命令并尝试了一下,但没有奏效。我会试试你的。我回去把“&”放进去,这似乎确实让脚本执行了命令。不过,他们都没能成功。我从trascript.log中取了一个并复制粘贴到命令行中,它成功了。你知道如何将脚本输出作为尝试失败的原因吗?我看到了
&
无法解析字符串的问题。因此,您希望能够在命令运行之前看到它,然后再运行它吗?我不知道有什么方法可以不使用
调用表达式
,这是永远不应该使用的。谢谢,@AdminOfThings。这让剧本发挥了作用,我学到了一些非常有价值的东西。