Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 混淆参数_Powershell - Fatal编程技术网

Powershell 混淆参数

Powershell 混淆参数,powershell,Powershell,需要帮助 我有一个相当难的问题,我想解决。 我有一个数组: @array = string, string, string 在我的例子中: yellow, red, blabla 我想使用数组中的这些字符串,并将它们放入一个带有额外if子句的commandlet中(很难解释,我最好演示一下),并在将它们添加到commandlet之前检查它们是否存在 $array = @() $array += "red" $array += "blabla" $command = write-host if

需要帮助

我有一个相当难的问题,我想解决。 我有一个数组:

@array = string, string, string
在我的例子中:

yellow, red, blabla
我想使用数组中的这些字符串,并将它们放入一个带有额外if子句的commandlet中(很难解释,我最好演示一下),并在将它们添加到commandlet之前检查它们是否存在

$array = @()
$array += "red"
$array += "blabla"
$command = write-host
if ($array[0]) {$command = $command + " -foregroundcolor $array[0]"}
if ($array[1]) {$command = $command + " -object $array[1]"}
&$command
这显然行不通。问题是,我怎样才能将一个带有字符串的commandlet的某些参数组合在一起呢

我有另一个想法,但我想避免,因为它不会保持简单:

If (!$array[0]) {
              (if (!$array[1]) {write-host "nodata"} else {write-host -object $array[1]})
else
                   (if (!$array[1]) {write-host -foregroundcolor $array[0]}
                   else {write-host -forgroundcolor $array[0] -object $array[1]})
                }

已经有错误了。

我想你要找的是。创建一个表示参数的名称/值对的哈希,并将其传递到cmdlet中。这提供了一种非常简单的方法,可以有条件地为cmdlet设置参数,而无需复制/粘贴在switch或嵌套if/else块中如何调用cmdlet的各种排列

$MyParms = @{};    
$array = @()
$array += "red"
$array += "blabla"
if ($array[0]) {$MyParms.Add("foregroundcolor",$array[0])};
if ($array[1]) {$MyParms.Add("object",$array[1])};

Write-Host @MyParms;

我想你要找的是。创建一个表示参数的名称/值对的哈希,并将其传递到cmdlet中。这提供了一种非常简单的方法,可以有条件地为cmdlet设置参数,而无需复制/粘贴在switch或嵌套if/else块中如何调用cmdlet的各种排列

$MyParms = @{};    
$array = @()
$array += "red"
$array += "blabla"
if ($array[0]) {$MyParms.Add("foregroundcolor",$array[0])};
if ($array[1]) {$MyParms.Add("object",$array[1])};

Write-Host @MyParms;
这是一个常见问题-“我想调用cmdlet,但根据各种编程条件,存在/缺少一些参数。”

标准的解决方案是将参数放在哈希表中,并使用

这是一个常见问题-“我想调用cmdlet,但根据各种编程条件,存在/缺少一些参数。”

标准的解决方案是将参数放在哈希表中,并使用


完全不清楚你在问什么,你的例子毫无意义。“混淆某些参数”是什么意思?很抱歉,我无法更清楚地了解我的问题。有时,作为一个非母语人士,很难就特殊编程问题提出有意义的问题。尽管我无法恰当地提问,但我已经得到了完美的答案。谢谢阅读。完全不清楚你在问什么,你的例子毫无意义。“混淆某些参数”是什么意思?很抱歉,我无法更清楚地了解我的问题。有时,作为一个非母语人士,很难就特殊编程问题提出有意义的问题。尽管我无法恰当地提问,但我已经得到了完美的答案。谢谢阅读。我愿意接受你的两个答案,但公平地说,一个越快得到批准。谢谢你的帮助和疯狂的速度!我想在几个小时后会有人回答这个问题。我想接受你的两个答案,但公平地说,一个得到批准的速度越快。谢谢你的帮助和疯狂的速度!我在想几个小时后会有人回答这个问题。
$array = @()
$array += "red"
$array += "blabla"

$params = @{}
if ($array[0]) { $params['foregroundcolor'] = $array[0] }
if ($array[1]) { $params['object'] = $array[1] }

write-host @params