【问题标题】:Change 2 values in an array更改数组中的 2 个值
【发布时间】:2018-06-15 20:43:25
【问题描述】:

我整天都在自责,似乎无法弄清楚...这是我的代码,真的很快

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)。

我在这里错过了什么?

【问题讨论】:

    标签: arrays powershell replace get find


    【解决方案1】:

    好吧,我在寻求帮助后立即想通了......

    我更改了以下内容:

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

    收件人:

    $bios[$arr3] = "    Available"
    $bios[$arr2] = "    *Hidden"
    

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

    【讨论】:

    • 第一个块中的命令输出替换的结果,而不更新数组元素(或替换整个数组)。第二个块中的命令确实更新了数组元素,但只是通过分配一个 fixed 新值而不是通过替换从旧值派生新值。
    • 我明白你在说什么。 Mklement0 提供了一个合乎逻辑的解决方案,我将把它合并到我的代码中。
    • 也是我 (mklement0) 在这里发表评论的。除非我的回答(还)不能完全解决您的问题,否则我可以建议您接受并删除这个问题吗?
    【解决方案2】:

    你的问题:

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

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

    通常,如果您希望 -replace 操作的结果更新变量,您必须使用 assignment 将该变量作为 LHS,除了将其用作操作数:

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

    请注意,PowerShell 具有 some 运算符的简写符号,用于将运算符应用于变量使用操作结果更新它(例如,$v += 1$v = $v + 1 的简写),但 -replace 不存在这样的快捷方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 2011-11-19
      • 2020-08-11
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多