与Cmdlet不同的Canonical Powershell参数Splatting

问题描述 投票:1回答:1

是否有正确的方法在下面的代码中的$parametersGet-ADUser语句中使用相同的Select变量?

Get-ADUser有一个名为“Properties”的参数,而Select有一个名为“Property”的参数。

我不想管理$parameters变量的多个副本。

欢迎任何建议。

import-module ActiveDirectory

$user = "SomeUserName"

$parameters = @{
    "Properties" = @(
        "msExchWhenMailboxCreated",
        "whenCreated"
     )
}

function get-ExchangeUserData {

    foreach ($user in $users){

        # Select @parameters does not work with Select.
        get-aduser $user @parameters | select @parameters

    }

}
powershell
1个回答
3
投票

有几种方法可以做到这一点,但他们都可以在这里反对你的目标。

Use Parameter shortening to your advantage

$parameters = @{"Propert" = @("msExchWhenMailboxCreated", "whenCreated")}

# Select @parameters does not work with Select.
get-aduser user @parameters | select @parameters

我们将哈希表中的键设置为“属性”,这在Get-ADUserSelect-Object中都是明确的。因此,您仍然使用完全相同的信息来绘制两个cmdlet。您也可以使用看起来更令人愉悦的Prop,它传达的意思相同。

Watch for parameter aliases that work in your favour

虽然之前的解决方案很酷,但在这种情况下,由于Get-Aduser supports 'property' as an alias,所有这一切都没有必要。 $parameters = @{"Property" = @("msExchWhenMailboxCreated", "whenCreated")}工作得很好。

Break out the properties into another variable or call it separately

不是真正的splatting,但它保持与你说的保持一个列表的逻辑

我不想管理$parameters变量的多个副本。

$props = "msExchWhenMailboxCreated", "whenCreated"

$parameters = @{"Properties" = @($props)}

get-aduser user @parameters | select $props

要么

$parameters = @{"Properties" = @("msExchWhenMailboxCreated", "whenCreated")}

# Select @parameters does not work with Select.
get-aduser user @parameters | select $parameters.Properties
© www.soinside.com 2019 - 2024. All rights reserved.