更改数组中的2个值

时间:2018-01-06 02:26:10

标签: arrays powershell replace get find

我整天都在为这一天打败自己并且似乎无法弄明白......这里我的代码真的很快

C:\temp\biosconfigutility.exe --% /get:C:\temp\currentbios.txt
$bios = Get-Content C:\temp\currentbios.txt
$arr1 = [array]::IndexOf($bios, "TPM Device")
$arr2 = $arr1 + 1
$arr3 = $arr2 + 1
$bios[$arr3] -replace "\*Available", "Available"
$bios[$arr2] -replace "Hidden", "*Hidden"

所以,我不认为我会以一种有意义或有效的方式解决这个问题。但基本上发生了什么,第一行是生成一个txt文档,我需要以编程方式更改大约10,000台PC。

我需要找到一种方法来在底部2行看到更改,并将更改保存到整个数组(变量$bios)。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

你的问题:

$bios[$arr3] -replace "\*Available", "Available"

使用$bios[$arr3]操作的结果更新-replace - 相反,它只是输出结果。

通常,如果您希望-replace操作的结果更新变量,则必须使用带有该变量的赋值作为LHS ,在 中使用它作为操作数:

$bios[$arr3] = $bios[$arr3] -replace '\*Available', 'Available'
$bios[$arr2] = $bios[$arr2] -replace 'Hidden', '*Hidden'

请注意,PowerShell为某些运算符提供了一个简写表示法,用于将运算符应用于变量使用操作结果更新它(例如{{1} } {作为$v += 1)的简写,但$v = $v + 1没有这样的快捷方式。

答案 1 :(得分:0)

嗯,我在寻求帮助后立刻想出来......

我更改了以下内容:

func someFunc() interface{}{
    if 5>2{
        return nil
    }else if something{
        return 42
    }
    return nil
}

func main() {
    switch someFunc().(type) {
    case int:
    case types.Nil:
        fmt.Println("5>2")
    }
}

要:

$bios[$arr3] -Replace "\*Available","Available"
$bios[$arr2] -Replace "Hidden","*Hidden"

第一个解决方案只用一个单词替换整个数组,破坏了整个事情......但是使用=符号,只是改变了调用的索引,解决了我的问题