如果我们直接编写Hash表,为什么splatting不工作?

时间:2018-02-15 11:23:01

标签: powershell powershell-v3.0 dsl

如果我们传递如下参数,Powershell splatting会起作用。

    $Vm = @{ 
       Name = "NewVm"
       MemoryStartupBytes = 1GB
       NewVHDPath = d:\vhd\base.vhdx
   }
    New-VM @VM

但如果尝试如下,则无法正常工作。

    New-VM @{ 
       Name = "NewVm"
       MemoryStartupBytes = 1GB
       NewVHDPath = d:\vhd\base.vhdx
   }

我也试过

    New-VM @( @{ 
       Name = "NewVm"
       MemoryStartupBytes = 1GB
       NewVHDPath = d:\vhd\base.vhdx
   }
  )

此处还创建了哈希表(未命名的哈希表)。但为什么它不接受?是否有任何技巧可以让它相信它是变量?

一个技巧是编写代理如下。

    function New-myVM
    {
        param
        (
            [Hashtable] $ht
        )

        New-VM @ht

    }

    New-MyVM @{ 
       Name = "NewVm"
       MemoryStartupBytes = 1GB
       NewVHDPath = d:\vhd\base.vhdx
   }

但是如果我们这样做,那么每个命令都需要很重的代理。

如果它可以像这样写,它看起来像DSL。所以我想找到一种方法。

0 个答案:

没有答案