我正在编写以前编写的脚本的新版本,但我正在升级它以使用MSCraph创建Office 365帐户。
我在这里遇到了一个问题,因为我创建了一个函数来测试用户是否存在:
#Function to check account existence
Function AccountExists
{
Param(
[string]$fxEmailAccount
)
#Validamos si la cuenta existe
$return = [System.Convert]::ToBoolean("TRUE")
try {
$user = Get-MgUser -UserId $fxEmailAccount
Write-Output $($user.Count())
}
catch {
$return = [System.Convert]::ToBoolean("FALSE")
}
return $return
}
$result = AccountExists -fxEmailAccount [email protected]
字符串
这对我来说部分有效,这里的问题是我如何正确检查帐户的存在,因为Get-MGUser返回一个对象,每次我运行函数时,它有时会因为我实现的逻辑而失败。
我已经尝试过使用Get-MgUserCount,但在这种方法上也没有任何运气。
有人能告诉我,我可能做错了什么,或者没有很好地解释这样做。
谢谢你,
1条答案
按热度按时间gupuwyp21#
您的函数可能可以简化为以下PowerShell惯用形式:
字符串
Test-AccountExists
使用PowerShell的动词-名词命名约定approved verbTest
。-ErrorAction Ignore
忽略不存在的用户ID导致的错误,并使Get-MgUser
不产生输出。[bool]
,如果返回用户对象,则会生成$true
,如果没有输出,则会生成$false
。Get-MgUser
的-UserId
参数接受的是UPN(用户主体名称)或URL,并且不是每个电子邮件地址都是UPN,因此最好也使用-UserId
作为函数的参数名称。至于你尝试了:
$true
和$false
,因此不需要[System.Convert]::ToBoolean("...")
Get-MgUser
返回的错误是一个 * 非终止 * 错误:在PowerShell中,这样的错误不会被try
/catch
语句捕获-除非您使用-ErrorAction Stop
将其提升为 * 终止 * 语句。然而,在手头的情况下,使用-ErrorAction Ignore
来 * 忽略 * 错误更简单,并从输出的缺失中推断输出的存在,如上所示。Write-Output $($user.Count())
$user.Count()
Get-MgUser
* 没有 * 实现.Count()
* 方法 *,所以这个调用可能会失败-并触发catch
块。.Count
* 属性 *:如果给定对象的类型没有该名称的本机属性,则PowerShell将其作为intrinsic member提供,报告标量(非集合)对象的1
和$null
的0
。return
的内容。return
关键字的作用的概念信息,请参见this answer