azure AD powerShell编辑管理器

时间:2016-09-21 18:59:05

标签: powershell azure azure-powershell

我编写了一个DotNet Forms应用程序,它使用PowerShell自动化来创建和修改内部部署AD,内部部署Exchange,Azure AD和O365中的用户,以匹配HR提供的记录。这已经被客户使用了几年并且运行良好。

该代码使用适用于Windows PowerShell的Azure Active Directory模块(MSOnline - MSOL)来查看和编辑Azure AD中的用户。我最初使用MSOL版本8073.4,但自从升级到MSOL版本1.1.166.0以来我已经使用过 (见http://social.technet.microsoft.com/wiki/contents/articles/28552.microsoft-azure-active-directory-powershell-module-version-release-history.aspx

例如,我使用以下PowerShell修改用户标题:

Import-Module MSOnline
$Cred = Get-Credential
Connect-MSOLService -Credential $Cred
Set-MSOLUser -UserPrincipalName Santa@northpole.com -Title 'Deliverer of presents'

在我被要求扩展代码以更新每个Azure AD用户"经理ID"之前,一切都很好。属性。我想的很容易!我只需要更新用户"经理ID"字段(这是管理器的Azure AD帐户的ObjectID)就像我更新标题.....

呃,没有。我找不到任何方法来更改管理员字段。我已经遍历了MSDN文档,找不到任何方法来执行此操作:

所以我查看了目前处于预览状态的新v2 Azure AD模块(在上述版本历史记录URL中提到),可以从PowerShell库中下载(搜索" AzureADPreview")。 这些最终将取代旧的MSOL cmdlet,看起来非常类似于现有的Azure PowerShell模块(用于创建VM等)。 这确实为设置用户"经理ID"提供了支持。通过命令

Set-AzureADUserManager

我尝试了这个并且它有效,所以我想我会更新我的应用程序以使用新的v2 API而不是v1 API(MSOL)。

不幸的是我发现了

Set-AzureADUser

命令(用于设置作业标题等属性)在v2.0.0.1中完全中断,但失败并显示错误

  

"调用的目标"

抛出了异常

我尝试的任何组合。我已通过PowerShell库向开发人员报告此内容。

幸运的是,我发现这些模块的先前版本1.1.167.0运行正常,因此我使用该版本,现在可以成功创建用户,修改用户,配置用户"经理ID& #34;但我无法弄清楚如何设置许可证(例如O365_BUSINESS_PREMIUM)。命令Set-AzureADUserLicense的文档几乎不存在,我一直无法弄清楚如何使用它。

我想我需要做以下事情:

# Create an object which contains the individual license 'x' I want to add
# The available license SkuIDs can be read from Get-AzureADSubscribedSku
$MySingleLicenseToAdd = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicense
$MySingleLicenseToAdd.SkuID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# Create a licenses object which is assigned the individual licenses I want to add or remove
$MyLicensesToAddOrRemove = New-Object -TypeName Microsoft.Open.AzureAD.Model.AssignedLicenses
$MyLicensesToAddOrRemove.AddLicenses = $MySingleLicenseToAdd
$MyLicensesToAddOrRemove.RemoveLicenses = $Null

# Perform the license action against the specified user 'y'
Set-AzureADUserLicense -ObjectId 'yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyy' -AssignedLicenses $MyLicensesToAddOrRemove

但它在第二行代码中失败,说" SkuID"是一个只读字段。

所以我无法使用V1(MSOL)API,因为我找不到更新用户"经理ID"的方法。领域。 我无法使用V2 API,因为我无法找到分配许可证的方法(而且它在预览中也不是一个好主意在现场使用)

我目前的计划是回到使用V1 API,然后使用V2 API来更新" Manager ID"仅限字段,但这不是一个理想的解决方案(因为我将使用两个不同的API两次登录Azure)所以我想知道是否有人可以提供任何建议?

  1. 我的偏好是使用v1(MSOL)API来更新 "经理ID"字段。
  2. 我的第二个偏好是使用v2 API并学习如何分配许可证。
  3. 我的第三个偏好是别的;)
  4. 我已经阅读了一篇关于直接使用REST API的文章,但这很重要,如果可能的话,我更愿意避免并坚持使用Azure PowerShell API。

    对于looooong问题感到抱歉,但我试图提供一些关于我尝试使用V2 API的原因。

    更新(2016年9月23日):

    AzureADPreview 2.0.0.2刚刚发布,它解决了 Set-AzureADUser :)的问题,但不幸的是部分破坏了 Set-AzureADUserManager :(

    使用此新版本的许可证存在相同问题

2 个答案:

答案 0 :(得分:0)

以下是如何使用Set-AzureADuserLicense cmdlet为用户设置许可证的示例。

如果澄清,请告诉我。

<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Http\Controllers\AdminController;
use App\CreateEmployee;
use App\Employee;
use App\Users;




class CreateEmployeeController extends AdminController
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

 public function addemployee()
    {

        $employee = CreateEmployee::all();

$employee =CreateEmployee::join('users','users.id','=','users.users_id')->get();

        return view('app.admin.employee.employee',compact('employee','users'));
    }


    public function employeesave(Request $request)
    {

        $title = 'Add Employee';  

        $employee = new Employee();
        $employee->name=$request->employee_name;
        $employee ->area = $request->area;
        $employee->save();
        Session::flash('flash_notification', array('level' => 'success', 'message' => 'employee created successfully'));
        return Redirect::action('Admin\CreateEmployeeController@addemployee');

        }


    public function updateemployee(Request $request)
    {
        Employee::where('id',$request->id)->update(array('name'=>$request->employee_name,'area'=>$request->area));

        Session::flash('flash_notification', array('level' => 'success', 'message' => 'shop details updated successfully'));
        return Redirect::action('Admin\CreateEmployeeController@addemployee',array('id' => $request->id));
    }

 public function editemployee($id)
    {
        $employee = Employee::where('id',$id)->get();


       return view('app.admin.employee.editemployee',compact('employee'));
   }
       public function deleteemployee($id)
    {

        $employee =  Employee::where('id',$id)->get();

        return view('app.admin.employee.delete',compact('employee'));
    }


    public function deleteconfirms($id)
    {



         $employee = Employee::where('id',$id)->delete();






         Session::flash('flash_notification', array('level' => 'success', 'message' => 'customer deleted successfully'));
         return Redirect::action('Admin\CreateEmployeeController@addemployee');



    }

    public function destroy($id)
    {
        //
    }
}
//view file
@extends('app.admin.layouts.default')


{{-- Web site Title --}}
@section('title') {{{ trans('site/user.register') }}} :: @parent @stop

@section ('styles')
@parent 
<style type="text/css">
</style>
 @stop

{{-- Content --}}
@section('main')
@include('utils.vendor.flash.message')
    <div class="row">
        <div class="page-header">
            <h2>Add Employee</h2>
        </div>
    </div>

    <div class="container-fluid">
        <div class="row">


                        @include('utils.errors.list')


                        <form class="form-horizontal" role="form" method="POST" action="{{ URL::to('admin/addemployee') }}">
                            <input type="hidden" name="_token" value="{{ csrf_token() }}">




                                <div class="col-sm-12">
                             <div class="form-group">
                                <label class="col-md-2 control-label">Employee Name</label>

                                <div class="col-md-2">
                                    <input type="text" class="form-control" name="employee_name"
                                          required>
                                </div>
                            </div>
                            </div>


                               <div class="col-sm-12">

                                 <div class="form-group">


                                            <label class="col-md-2 control-label" for="religion">Password</label>

                                            <div class="col-md-2"> 

                                                <input type="password" class="form-control"   placeholder="Password"  name="password" id="password" data-parsley-trigger="change"  data-parsley-required="true" data-parsley-minlength="6" data-parsley-maxlength="14" required> 


                            {!! $errors->first('cpassword', '<label class="control-label" for="cpassword">:message</label>')!!}



                                            </div>

                                        </div>

                             </div>

                             </div> 



                             <div class="row">

                                 <div class="col-sm-12">

                                     <div class="form-group">

                                            <label class="col-md-2 control-label" for="caste">Confirm Password</label>

                                            <div class="col-md-2"> 

                                                 <input type="password" class="form-control" placeholder="Confirm Password" name="password_confirmation" id="password_confirmation"  data-parsley-trigger="change"  data-parsley-required="true"  data-parsley-equalto="#password" data-parsley-minlength="6" data-parsley-maxlength="14" required>

                             {!! $errors->first('password_confirmation', '<label class="control-label" for="password_confirmation">:message</label>')!!}

                                            </div>

                                        </div>

                                 </div>

                             </div>                           

                             <div class="row">

                                 <div class="col-sm-12">


                                 <div class="form-group">
                                <label class="col-md-2 control-label">Area</label>

                                <div class="col-md-2">
                                    <input type="text" class="form-control" name="area"
                                          required  placeholder="Area">
                                </div>
                            </div>
                            </div>
                            </div>



                            <div class="form-group">
                                <div class="col-md-2 col-md-offset-2">
                                    <button type="submit" class="btn btn-primary">
                                        Add
                                    </button>
                                </div>
                            </div>

                        </form>
                        </div>
                        </div>

            <div class="invoice-content">

             <div class="table-responsive">

           <div class="col-md-offset-2">

            <table class="table table-invoice">

                <thead>

                    <tr>

                       <th>Employee Name</th>
                       <th>Area</th>  


                    </tr>

                </thead>

                </div>
                </div>

                <tbody>




                    @foreach($addemployee as $employee)

                    <tr>
                        <td>{{$employee->employee_name}}</td>
                        <td>{{$employee->area}}</td> 

                        <td>
                        <a href="employee/edit/{{$employee->id}}">Edit</a>
                        <a onclick="return confirm('Are you Sure you want to do this Action!'); style.backgroundColor='#84DFC1'; "  href="employee/delete/{{$employee->id}}">delete</a>

                        </td>
                   </tr>

                    @endforeach  

                    @if(!count($employee))

                    <tr><td>NO data found </td></tr>



                    @endif



                </tbody>




                </tbody>



            </table>
                    {{--</div>--}}
                {{--</div>--}}
            {{--</div>--}}
        </div>
    </div>
@endsection

答案 1 :(得分:0)

感谢您的回复。罗布。

您提供的代码与我尝试的代码相同(请参阅原始问题中的代码),但您从现有用户检索SkuID除外。

由于AzureADPreview的两个新版本已经发布(2.0.0.7和2.0.0.17),这促使我再次尝试新版本的AzureADPreview以及我最初发布时可用的原始版本。

我的结果如下:

  

2.0.0.1:不起作用。只读错误。

     

2.0.0.2:不起作用。只读错误。

     

2.0.0.7:工作

     

2.0.0.17:工作

所以基本上它是AzureADPreview原始版本的一个错误,但微软已经修复了它。

现在全部工作。