Powershell 在不展开数组的情况下将参数放入cmdlet

Powershell 在不展开数组的情况下将参数放入cmdlet,powershell,Powershell,我有一个cmdlet: $dnstype = ,@("Primary","Secondary","Tertiary") $dnsserver = ,@("192.168.1.11","192.168.1.12","192.168.150.13") Set-HPEiLOIPv4NetworkSetting -connection $connection -DNSServer $dnsserver -DNSServerType $dnstype 这个很好用 但是,我需要显示参数,因为我正在根据对

我有一个cmdlet:

$dnstype = ,@("Primary","Secondary","Tertiary")
$dnsserver = ,@("192.168.1.11","192.168.1.12","192.168.150.13")

Set-HPEiLOIPv4NetworkSetting -connection $connection -DNSServer $dnsserver -DNSServerType $dnstype
这个很好用

但是,我需要显示参数,因为我正在根据对象的已知状态添加参数(这是因为某些参数会导致重置,如果可能的话,我会尽量避免重置)

执行以下操作时,不会修改DNS服务器,因为它们在发送到cmdlet时需要保持“展开”

$dnstype = ,@("Primary","Secondary","Tertiary")
$dnsserver = ,@("192.168.1.11","192.168.1.12","192.168.150.13")

$NewDCHPv4Settings = @{
    Connection    = $connection
    InterfaceType = "Dedicated"
    OutVariable   = "IPv4Set"
    OutputType    = "Object"
    DNSName       = $ShortName.ToLower()
    ErrorAction   = "Stop"
    Verbose       = $true
}
# Check DNS and amend if required
if ($IPv4Settings.DNSServer -ne $dnsserver) {
    Write-Host "DNS server entries not correct, amending"
    $NewDCHPv4Settings.Add("DNSServer", $dnsserver)
    $NewDCHPv4Settings.Add("DNSServerType", $dnstype)
}

Set-HPEiLOIPv4NetworkSetting @NewDCHPv4Settings
那么问题是——如何将一元数组添加到splat数组中,以便保持完整性并正确处理它们

根据要求-以下是定义:

Name          : Set-HPEiLOIPv4NetworkSetting
ModuleName    : HPEiLOCmdlets
Module        : @{Name=HPEiLOCmdlets}
CommandType   : Cmdlet
Definition    : 
                Set-HPEiLOIPv4NetworkSetting [-Connection] <Connection[]> -InterfaceType <string[]> [-SharedNetworkPortType <string[]>] [-SNPPort <int[]>] 
                [-VLANEnabled <string[]>] [-VLANID <int[]>] [-DNSName <string[]>] [-DomainName <string[]>] [-NICEnabled <string[]>] [-FullDuplex <string[]>] 
                [-LinkSpeedMbps <string[]>] [-DHCPEnabled <string[]>] [-DHCPv4Gateway <string[]>] [-DHCPv4DomainName <string[]>] [-DHCPv4DNSServer <string[]>] 
                [-DHCPv4WINSServer <string[]>] [-DHCPv4StaticRoute <string[]>] [-DHCPv4NTPServer <string[]>] [-IPv4Address <string[]>] [-IPv4SubnetMask <string[]>] 
                [-IPv4Gateway <string[]>] [-IPv4StaticRouteIndex <int[][]>] [-IPv4StaticRouteDestination <string[][]>] [-IPv4StaticRouteMask <string[][]>] 
                [-IPv4StaticRouteGateway <string[][]>] [-DNSServerType <string[][]>] [-DNSServer <string[][]>] [-RegisterDDNSServer <string[]>] [-PingGateway 
                <string[]>] [-RegisterWINSServer <string[]>] [-WINSServerType <string[][]>] [-WINSServer <string[][]>] [-iLONICAutoDelay <int[]>] [-iLONICFailOver 
                <string[]>] [-iLONICFailOverDelay <int[]>] [-iLONICAutoSelect <string[]>] [-iLONICAutoSNPScan <int[]>] [-OutputType <string>] [-Force] 
                [<CommonParameters>]

ParameterSets : {@{Name=__AllParameterSets; IsDefault=False; Parameters=System.Management.Automation.PSObject[]}}
Name:Set-HPEiLOIPv4NetworkSetting
ModuleName:HPEiLOCmdlets
模块:@{Name=HPEiLOCmdlets}
CommandType:Cmdlet
定义:
Set-HPEiLOIPv4NetworkSetting[-Connection]-InterfaceType[-SharedNetworkPortType][-SNPPort]
[-VLANEnabled][-VLANID][-DNSName][-DomainName][-NICEnabled][-FullDuplex]
[-LinkSpeedMbps][-DHCPEnabled][-DHCPv4Gateway][-DHCPv4DomainName][-DHCPv4DNSServer]
[-DHCPv4WINSServer][-DHCPv4StaticRoute][-DHCPv4NTPServer][-IPv4Address][-IPv4SubnetMask]
[-IPV4网关][-IPV4静态路由索引][-IPV4静态路由目标][-IPV4静态路由任务]
[-IPv4StaticRouteGateway][-DNSServerType][-DNSServer][-RegisterDDNSServer][-PingGateway
][-RegisterWinServer][-WINSServerType][-WINSServer][-iLONICAutoDelay][-iLONICFailOver
][-iLONICFailOverDelay][iLONICAutoSelect][iLONICAutoSNPScan][OutputType][Force]
[]
参数集:{@{Name=u所有参数集;IsDefault=False;参数=System.Management.Automation.PSObject[]}

在评论中,我的问题是由国际劳工组织本身/逻辑引起的,而不是splat不正确。我的原始代码确实按照预期工作:

$dnstype = ,@("Primary","Secondary","Tertiary")
$dnsserver = ,@("192.168.1.11","192.168.1.12","192.168.150.13")

$NewDCHPv4Settings = @{
    Connection    = $connection
    InterfaceType = "Dedicated"
    OutVariable   = "IPv4Set"
    OutputType    = "Object"
    DNSName       = $ShortName.ToLower()
    ErrorAction   = "Stop"
    Verbose       = $true
}
# Check DNS and amend if required
if ($IPv4Settings.DNSServer -ne $dnsserver) {
    Write-Host "DNS server entries not correct, amending"
    $NewDCHPv4Settings.Add("DNSServer", $dnsserver)
    $NewDCHPv4Settings.Add("DNSServerType", $dnstype)
}

Set-HPEiLOIPv4NetworkSetting @NewDCHPv4Settings

阵列阵列的用途是什么
在数组文字前面
@()
@TheIncorrigible1一元数组构造操作符通过将数组包装到另一个数组中(展开外部数组时,嵌套数组保持不变)来防止PowerShell展开数组。
$NewDCHPv4Settings.Add(“DNSServer”,$DNSServer)
->
$NewDCHPv4Settings['DNSServer']=,$DNSServer
因此,如果
-DNSServer
-DNSServerType
需要字符串,为什么首先要使用数组而不是修改字符串?@怀疑论者您是否更改了这两个参数(错误来自
DNSServerType
,而不是
DNSServer
)?你试过不用逗号吗?请使用您当前拥有的代码和从该代码中得到的错误更新您的问题。还显示要调用的cmdlet/函数的接口定义。