我整天都在为这一天打败自己并且似乎无法弄明白......这里我的代码真的很快
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
)。
我在这里缺少什么?
答案 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"
第一个解决方案只用一个单词替换整个数组,破坏了整个事情......但是使用=符号,只是改变了调用的索引,解决了我的问题