无法找到接受参数的位置参数

时间:2016-03-20 09:01:06

标签: powershell

我的脚本有问题。我检查固件类型,然后根据它格式化硬盘。问题是我在运行命令时遇到错误

λ clang -std=c++14 test.cpp
test.cpp:11:18: error: no matching function for call to object of type 'const ranges::v3::adl_size_detail::size_fn'
std::cout << size(names | view::filter([](const auto& s) {return s[0] == 'T';}));
             ^~~~
K:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\range/v3/size.hpp:90:32: note: candidate template
  ignored: substitution failure [with Rng =
  ranges::v3::remove_if_view<ranges::v3::iterator_range<std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<std::basic_string<char,
  std::char_traits<char>, std::allocator<char> > > > >,
  std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<std::basic_string<char, std::char_traits<char>,
  std::allocator<char> > > > > >, ranges::v3::logical_negate<(lambda at test.cpp:11:44)> >]: no matching function
  for call to 'size'
            constexpr auto operator()(Rng &&rng) const ->
                           ^
K:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\range/v3/utility/iterator.hpp:405:32: note: candidate
  function template not viable: requires 2 arguments, but 1 was provided
        iterator_size_t<I> operator()(I begin, S end) const

它说

a positional parameter cannot be found that accept argument '-UseMaxiumSize'  
+ categoryinfo       : invalidargument: (:) [New-Partition], ParameterBindingException  
+ fullyqualifiederror: PositionalParameterNotFound, New-Partition

有趣的是,如果我使用New-Partition -DiskNumber 0 -GptType '{ebd0a0a2-b9e5-4433-87c0-68b6b72699c7}' $partsize_param -DriveLetter C 代替-UseMaximumSize

,该命令运行正常

有人能指出我正在犯的错误吗?

$partsize_param

2 个答案:

答案 0 :(得分:2)

您不能(轻松)将变量用作参数名称。这是使用variable splatting的好情况。这使您可以在哈希表中轻松构建一组动态参数。

{{store.getState().counterObject.value}}

答案 1 :(得分:2)

您不能用字符串文字替换参数名称,如下所示:

$p = "-ParamName"
Get-Stuff $p

解析器会将字符串“-ParamName”解释为位置参数的参数。由于无法找到位置参数,因此会抛出错误。

处理动态参数参数的正确方法就是使用splatting:

$params = @{}

if ("$PartitionSize" -eq "max") {
    $params['UseMaximumSize'] = $true
} else {
    $params['Size'] = $PartitionSize
}

New-Partition @params

您可以将所有已命名的参数参数放入哈希表中,也可以只绘制一组部分参数:

if($firmwaremode -eq "Legacy BIOS") {
    New-Partition -IsActive @params
} else {
    New-Partition @params
}