这个头衔真的流了.
在设置用于Azure Active Directory的计算机时,我们会让IT进行初始设置和配置.这包括首次登录并加入Azure Active Directory.登录时强制您选择验证方法.我们会使用我们的台式电话或手机轻松.
现在是我们更新第二个因素电话号码的时候了.我知道一种通过Azure AD Web UI手动执行此操作的方法,但我正在寻找一种在PowerShell中设置该编号的脚本方式.
这是我通过PowerShell检索数字的方法.
Get-msoluser -UserPrincipalName "email@emailaddress.com" | Select-Object -ExpandProperty StrongAuthenticationUserDetails
该代码返回此信息:
ExtensionData : System.Runtime.Serialization.ExtensionDataObject
AlternativePhoneNumber :
Email :
OldPin :
PhoneNumber : +1 5554445555
Pin :
但是,似乎没有类似的选项来设置StrongAuthenticationUserDetails.
我的所有搜索都提到了如何批量启用双因素身份验证,这不是我想要做的.我想保留StrongAuthentication,只更新电话号码.
最佳答案 正如我在评论中所说,看来PowerShell有只读访问权限.
Azure feedback甚至有开门票.
有计划,但没有ETA.我的猜测是,如果你只想使用powershell,你将不得不等待.
作为解决方法,您可以使用powershell& watir for .NET或Watin与Watin recorder通过Internet Explorer自动化它.因为我没有测试Azure;我无法为您创建可行的代码.
使用Watin和powershell – 您可以查看:https://cmille19.wordpress.com/2009/09/01/internet-explorer-automation-with-watin/
以下文本和代码,我想在这里备份,取自上面的页面(作者的所有学分):
Next click the record button and click the HTML element you want to
automate. Then stop the WatIN recorder and click copy code to
clipboard icon. This will produce some C# code that just needs to be
translated into PowerShell:
// Windows
WatiN.Core.IE window = new WatiN.Core.IE();
// Frames
Frame frame_sd_scoreboard = window.Frame(Find.ByName("sd") && Find.ByName("scoreboard"));
// Model
Element __imgBtn0_button = frame_sd_scoreboard.Element(Find.ByName("imgBtn0_button"));
// Code
__imgBtn0_button.Click();
window.Dispose();
So, I now know the name of the button and that it is 3 frames deep. A
little WatIN object exploration later, I came up with the follow
script, which clicks a button every 50 mintues.
#Requires -version 2.0
#powershell.exe -STA
[Reflection.Assembly]::LoadFrom( "$ProfileDirLibrariesWatiN.Core.dll" ) | out-null
$ie = new-object WatiN.Core.IE("https://sd.acme.com/CAisd/pdmweb.exe")
$scoreboard = $ie.frames | foreach {$_.frames } | where {$_.name –eq ‘sd’} | foreach {$_.frames } | where {$_.name –eq ‘scoreboard’}
$button = $scoreboard.Element("imgBtn0_button")
while ($true)
{
$button.Click()
#Sleep for 50 minutes
[System.Threading.Thread]::Sleep(3000000)
}