PowerShell -增加Type开关参数



我创建了一个脚本,它能够定位Azure上的用户、组、服务主体和应用程序。这是我有的。

$user = Get-AzADUser -ObjectId $objectID
if ($user)
{
$user | Format-List Mail, DisplayName
}
else
{
$group = Get-AzADGroup -ObjectId $objectID
if ($group)
{
$group | Format-List DisplayName, Description, Id
}
else
{
$appO = Get-AzADApplication -ObjectId $objectID
if ($appO)
{
Write-Host "ObjectID"
$appO | Format-List ObjectType, DisplayName, Id, Type, ApplicationId
}
else
{
$appA = Get-AzADApplication -ApplicationId $objectID
if ($appA)
{
Write-Host "Application ID"
$appA | Format-List ObjectType, DisplayName, Id, Type, ApplicationId
}
else
{
$spO = Get-AzADServicePrincipal -ObjectId $objectID
if ($spO)
{
$spO | Format-List ObjectType, DisplayName, Id, Type, ApplicationId
}
else
{
$spA = Get-AzADServicePrincipal -ApplicationId $objectID
if ($spA)
{
$spA | Format-List ObjectType, DisplayName, Id, Type, ApplicationId
}
else
{
Write-Warning "Object does not exist."
}
}
}
}
}
}

现在,我正试图编写一些能够使用参数调用脚本的东西。我希望能够做一些事情,其中的脚本是能够搜索所有或具体到哪里搜索。例如:

搜索:/测试。ps1 -ObjectId "xxxx-xxxx-xxxx-xxxx ">

用户和组:/测试。ps1 -ObjectId "xxxx-xxxx-xxxx-xxxx "用户组

应用程序只有:/测试。ps1 -ObjectId "xxxx-xxxx-xxxx-xxxx "应用

我相信我将不得不改变我的剧本。到目前为止,这是我所拥有的:

Param(
[Parameter(Mandatory=$true)]
[ValidatePattern("^[a-z_0-9]{8}[-][a-z_0-9]{4}[-][a-z_0-9]{4}[-][a-z_0-9]{4}[-][a-z_0-9]{12}")]
$objectID,

[Parameter ()]
[switch]$user,
[switch]$group,
[switch]$SP,
[switch]$app
)
if ($user.IsPresent)
{
Get-AzADUser -ObjectId $objectID | Format-List Mail, DisplayName
}
if ($group.IsPresent)
{
Get-AzADGroup -ObjectId $objectID | Format-List DisplayName, Description, Id
}

我被困在如何去服务主体和应用程序,因为ObjectId和ApplicationId都可以用来搜索。此外,我不确定这是否是解决这个问题的正确方法。因为似乎我需要调用参数来工作(我希望脚本即使不调用参数也能工作)。如果有人可以帮助和确认,这将是非常感激!谢谢你!

我被困在如何去关于服务主体和应用程序,因为ObjectId和ApplicationId都可以用来搜索。

使用与之前迭代函数相同的方法:

if($ServicePrincipal.IsPresent){
$spO = Get-AzADServicePrincipal -ObjectId $objectID
if ($spO)
{
$spO
}
else
{
$spA = Get-AzADServicePrincipal -ApplicationId $objectID
if ($spA)
{
$spA
}
}
}

另外,我不确定这是否是解决这个问题的正确方法。因为似乎我需要调用参数来工作(我希望脚本即使不调用参数也能工作)

为函数/脚本定义一个默认的参数集名称,然后将开关参数附加到一个不同的参数集名称上——这样你可以很容易地确定是所有还是只是一些:

[CmdletBinding(DefaultParameterSetName='SearchAll')]
param(
[Parameter(Mandatory=$true)]
[ValidatePattern("^[a-z_0-9]{8}[-][a-z_0-9]{4}[-][a-z_0-9]{4}[-][a-z_0-9]{4}[-][a-z_0-9]{12}")]
$objectID,

[Parameter(ParameterSetName = 'Switches')]
[switch]$User,
[Parameter(ParameterSetName = 'Switches')]
[switch]$Group,
[Parameter(ParameterSetName = 'Switches')]
[switch]$ServicePrincipal,
[Parameter(ParameterSetName = 'Switches')]
[switch]$App
)
if($PSCmdlet.ParameterSetName -eq 'Switches'){
# at least one switch was passed, test for each switch, eg. if($App.IsPresent){ ... }
}
else{
# no switches present, try one by one
}

最新更新