【问题标题】:Incrementing variables in powershell在powershell中增加变量
【发布时间】:2021-03-10 17:16:23
【问题描述】:

我是 PowerShell 新手,我正在尝试创建一个脚本,该脚本通过一个 csv 文件(简单名称,值 csv)并将其中的每个新行作为变量加载,然后针对该组变量运行一个函数。

通过使用以下代码 sn-p,我已成功使其适用于 1 个变量:

Import-Csv -Path C:\something\mylist.csv | ForEach-Object {
    New-Variable -Name $_.Name -Value $_.Value -Force
    }

我的 csv 看起来像这样:

name,value
RegKey1,"Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\LanmanWorkstation"

基本上它是一个注册表项列表,每个注册表项都命名为 RegKey#,然后该注册表项的路径就是变量的预期值。

我目前正在使用“Test-Path”cmdlet,如果传递的 reg-key 存在则打印出 true/false,然后根据是否找到 reg key 打印出一些文本。 那 sn-p 看起来像这样:

Test-Path $RegKey1
IF ($LASTEXITCODE=0) {
    Write-Output "It worked"
    }
else    {
    Write-Output "It didn't work"
    }    

这很好用,但是我想要实现的是让 powershell 针对 csv 文件中的每一行运行此 cmdlet - 基本上检查其中的每个 reg 键,然后执行对其指定的任何操作。 我要避免的是为我计划使用的每个 regkey 声明数百个变量,而是让这个函数只在 csv 中运行,并且每次运行时,它都会增加变量名称旁边的数字 - RegKey1,RegKey2 ,RegKey3 等

让我知道是否有办法在 powershell 中执行此操作,或者有更好的方法完全解决此问题。如果我没有提供足够的信息,我也提前道歉,请告诉我。

【问题讨论】:

  • 我希望 ForEach-Object{} 循环通过 CSV 文件。为什么你的第一个代码 sn-p 不起作用?

标签: powershell


【解决方案1】:

您需要将if 语句放在Foreach-Object 循环中。这也只有在您的变量都具有相同的名称 $RegKey 时才有效。要添加,您可以使用for 循环。

Import-Csv -Path C:\something\mylist.csv | ForEach-Object {
    New-Variable -Name $_.Name -Value $_.Value -Force
IF (Test-Path $RegKey1) {
    Write-Output "It worked"
    }
else    {
    Write-Output "It didn't work"
    }    

    }

if 语句返回一个布尔值$true$false。因此,无需使用$LastExitCode,将Test-Path 作为评估条件。

或者,您可以在这里使用Foreach 循环来完成同样的事情:

 $CSV = Import-Csv -Path C:\something\mylist.csv
    Foreach($Key in $CSV.Value){
        $PathTest = Test-Path -Path $Key
            if($PathTest) {
                Write-Output "It worked"
                                } else {
                Write-Output "It didn't work"
                                }    
                    }

通过仅选择值(Reg Path)的csv迭代(一次读取列表1),我们可以通过将其值分配给$PathTest变量来测试该值,以在您的@中进行评估987654334@ 语句同上;也无需将其分配给变量,我们可以像上面一样在您的 if 语句中使用 Test-Path 以获得相同的结果。

【讨论】:

  • 非常感谢!我不是来自编码背景,所以我仍在学习这些概念,但这个解释准确地涵盖了我正在寻找的内容。再次感谢!
  • 祝你的项目好运!
猜你喜欢
  • 2017-12-03
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2019-09-03
  • 2012-03-19
  • 2014-01-07
相关资源
最近更新 更多