微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于 Powershell ForEach MFA 脚本的几个问题

如何解决关于 Powershell ForEach MFA 脚本的几个问题

我正在编写脚本以通过 Powershell 实施 MFA 部署。我正在连接到 office365 并运行 Get-Msoluser 命令以从 AD 获取用户列表(我相信)。我将它放入一个数组中,然后通过 ForEach 循环运行该数组。我不确定这是否还能正常工作,但我正在尝试弄清楚如何从这个循环中排除某些用户,因为我不想为域管理员激活 MFA。

Connect-MsolService
$array = @(Get-Msoluser | Select UserPrincipalName)
ForEach ($users in $array)
{ 
$st = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
$st.RelyingParty = "*"
$st.State = "Enabled"
$sta = @($st)
Set-Msoluser -UserPrincipalName $users -StrongAuthenticationRequirements $sta
}

所以我想我的 3 个问题是:

  1. 如何在数组中排除名称与特定字符串匹配的用户,例如“Admin、Administrator”?

  2. 是否可以获取用户输入并将其应用于 Connect-MsolService 的用户名/密码字段?

3) 这段代码是否可以正常运行,还是我完全不合时宜?

解决方法

正如评论中所说,您的代码需要进行一些改进。

试试:

从你的问题开始 2)
Connect-MsolService 有一个 -Credential 参数,获取该参数的最简单方法是使用 Get-Credential cmdlet:

# ask for credentials to make the connection
$cred = Get-Credential -Message 'Please enter your credentials to connect to Azure Active Directory'
Connect-MsolService -Credential $cred

接下来,您要定义要排除在受影响范围之外的用户列表。

$excludeTheseUsers = 'admin','user1','user2'  # etc.
# for using the regex `-notmatch` operator later,you need to combine the entries with the regex OR sign ('|'),# but you need to make sure to escape special characters some names may contain
$excludes = ($excludeTheseUsers | ForEach-Object { [regex]::Escape($_) }) -join '|'

# create the StrongAuthenticationRequirement object just once,to use on all users
$st = New-Object -TypeName Microsoft.Online.Administration.StrongAuthenticationRequirement
$st.RelyingParty = "*"
$st.State = "Enabled"
$sta = @($st)

# get an array of UserPrincipalNames
$array = (Get-MsolUser | Where-Object { $_.DisplayName -notmatch $excludes }).UserPrincipalName
foreach ($user in $array) {
    Set-MsolUser -UserPrincipalName $user -StrongAuthenticationRequirements $sta
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。