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为AzureAD设置StrongAuthenticationUserDetails电话号码?_Powershell_Azure - Fatal编程技术网

通过Powershell为AzureAD设置StrongAuthenticationUserDetails电话号码?

通过Powershell为AzureAD设置StrongAuthenticationUserDetails电话号码?,powershell,azure,Powershell,Azure,这个标题真的很流行 当设置用于Azure Active Directory的计算机时,我们会让它进行初始设置和配置。这包括首次登录并加入Azure Active Directory。登录时,它会强制您选择验证方法。为了方便,我们会使用台式电话或手机 现在是我们更新第二因素电话号码的时候了。我知道有一种方法可以通过Azure AD Web UI手动完成,但我正在寻找一种脚本化的方法来在PowerShell中设置该数字 Get-msoluser -UserPrincipalName "email@e

这个标题真的很流行

当设置用于Azure Active Directory的计算机时,我们会让它进行初始设置和配置。这包括首次登录并加入Azure Active Directory。登录时,它会强制您选择验证方法。为了方便,我们会使用台式电话或手机

现在是我们更新第二因素电话号码的时候了。我知道有一种方法可以通过Azure AD Web UI手动完成,但我正在寻找一种脚本化的方法来在PowerShell中设置该数字

Get-msoluser -UserPrincipalName "email@emailaddress.com" | Select-Object -ExpandProperty StrongAuthenticationUserDetails
下面是我如何通过PowerShell检索号码

Get-msoluser -UserPrincipalName "email@emailaddress.com" | Select-Object -ExpandProperty StrongAuthenticationUserDetails
该代码返回以下信息:

ExtensionData                     : System.Runtime.Serialization.ExtensionDataObject
AlternativePhoneNumber            :
Email                             :
OldPin                            :
PhoneNumber                       : +1 5554445555
Pin                               :
但是,似乎没有类似的选项用于设置StrongAuthenticationUserDetails


我所有的搜索结果都显示了如何批量启用2因素身份验证,这不是我想要做的。我想保持strong身份验证不变,同时只更新电话号码。

正如我在评论中所说,powershell似乎具有只读访问权限

甚至还有一张开放的门票

有一个计划要做,但没有预计到达时间。我的猜测是,如果只想使用powershell,您将不得不等待

作为解决方法,您可以使用powershell&或通过Internet Explorer将其自动化。因为我没有测试Azure;我无法为您创建可行的代码

使用Watin和powershell-您可以检查:

下面的文本和代码,我想在这里备份,是从上面的页面中提取的,所有的学分都归作者所有:

接下来,单击record按钮,并单击要删除的HTML元素 自动化然后停止WatIN记录器并单击将代码复制到 剪贴板图标。这将产生一些C代码,只需要 翻译成PowerShell:

https://portal.azure.com/#blade/Microsoft_AAD_IAM/UserDetailsMenuBlade/UserAuthMethods/userId/$($u.ObjectId)/adminUnitObjectId/?param1=$newPhone&param2=$newMail
所以,我现在知道了按钮的名称,它有3帧深。A. 小沃特在物体探索之后,我想出了以下方法 脚本,每50分钟单击一个按钮

免责声明:代码按原样提供。如果MS更改Azure门户接口,它可能会停止工作

我正在使用以下Greasemonkey脚本更新备用电子邮件和电话,因此该脚本仅对电子邮件有用:

// ==UserScript==
// @name     Unnamed Script 548177
// @version  1
// @grant    none
// @namespace https://portal.azure.com
// ==/UserScript==

(function(){
document.addEventListener('keydown', function(e) {
  // press alt+shift+g
  if (e.keyCode == 71 && e.shiftKey && !e.ctrlKey && e.altKey && !e.metaKey) {
    const url = document.URL;
    const regex = /https:\/\/portal.azure.com\/#blade\/Microsoft_AAD_IAM\/UserDetailsMenuBlade\/UserAuthMethods\/userId\/[\w-]+\/adminUnitObjectId[\/]*\?\w+=(\d{9})&\w+=([\w\.-@]+)/;
    const params = url.match(regex);
    const allAuthRows = document.getElementsByClassName('ext-userauthenticationmethods-section-row');
    const authRowsArray = Array.from(allAuthRows);
    let emailRow;
    let phoneRow;
    let i;
    for (i =0; i < authRowsArray.length; i++) {
      if (authRowsArray[i].childNodes[1].childNodes[1].childNodes[0].data === 'Email') {
        emailRow = authRowsArray[i]
      }
      if (authRowsArray[i].childNodes[1].childNodes[1].childNodes.length > 1) {
        if (authRowsArray[i].childNodes[1].childNodes[1].childNodes[1].childNodes[0].data === 'Phone') {
          phoneRow = authRowsArray[i]
        }
      }
    }

    const emailInput = emailRow.childNodes[3].childNodes[1].childNodes[1].childNodes[0].childNodes[0].childNodes[0].childNodes[2];
    const phoneInput = phoneRow.childNodes[3].childNodes[1].childNodes[1].childNodes[0].childNodes[0].childNodes[0].childNodes[2];
    const event = new Event('input', {
        'bubbles': true,
        'cancelable': true
    });
    if (params[1] !== '000000000') {
      phoneInput.value = `+48 ${params[1]}`;
      phoneInput.dispatchEvent(event);
    }
    if (params[2] !== 'null') {
      emailInput.value = params[2];
      emailInput.dispatchEvent(event);
    }
    setTimeout(() => {
      const buttonArr = document.getElementsByClassName('azc-toolbarButton-container fxs-portal-hover');
      const saveButton = Array.from(buttonArr).find(e => e.title === 'Save');
      saveButton.click();
    } , 2000);    

  }
}, false);
})();
如何使用它:

一次只打开一个选项卡,否则您将收到无法登录错误消息 不管怎样,你会时不时地收到那个错误,所以就等着吧 要触发脚本,请在加载站点后按Alt+Shift+g,如果需要,可以先在中更改快捷方式 更新和保存数据后,按Ctrl+w关闭当前选项卡,按Alt+tab切换到上一个窗口应为PowerShell 您仍然可以自由使用代码更新手机。确保更改波兰当前的国家代码+48
这与问题无关。您的命令设置了用户的电话号码,而不是MFA设置的电话号码。好吧,因为似乎没有其他解决方案,我将接受这一点并给予奖励,除非其他人给出更好的答案。现在,我想控制台中的一些javascript就足够了。一周前我遇到了同样的问题。MSOL cmdlet似乎缺少这样做的方法。AzureAD cmdlet也是如此。@bluf抱歉,请发帖子。不应该读那么快。无论如何,powershell似乎具有只读访问权限。甚至还有一张票是开着的。有一个计划要做,但没有预计到达时间。你不可能得到的答案是答案吗?我希望有任何方法可以通过编程实现:/我不确定是否应该再等几天,看看是否有任何解决办法。@Božostjković你应该等几天。也许有人有某种解决办法。@Božostjković我突然想到,你也许可以通过powershell创建一个watir自动化过程。看看我的答案。
https://portal.azure.com/#blade/Microsoft_AAD_IAM/UserDetailsMenuBlade/UserAuthMethods/userId/$($u.ObjectId)/adminUnitObjectId/?param1=$newPhone&param2=$newMail