【发布时间】: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