我们希望消除每个用户 appdata 文件夹中已识别的错误配置文件(并对其进行了手动修复)。配置文件仅存在于此处和彼处,并非存在于每个用户中。因此,我试图拼凑一个脚本,如果指定的文本与 config.xml 上的 get-content 匹配,它将返回 true/false。我想针对每台机器上的每个用户配置文件运行此脚本,并将结果输出到 csv。
到目前为止,我遇到了一个问题。仍在学习 powershell,因此非常感谢任何帮助。
$Users = "C:\Users"
$x = "This is the text I'm looking for"
Foreach ($Username in $Users)
{
$Path = "$Users\$Username\AppData\Local\MyApp\Settings\Config.xml"
$y = Get-Content -Path $Path
If ($y -match $x)
{
"true"
}
else
{
"false"
}
}
正如您所看到的,我还没有开始处理 csv 部分,因为我无法获取为 get-content 生成的正确路径。
我希望 foreach 循环能够顺利完成,但正确的路径却是:
"C:\Users\Username1\AppData\Local\MyApp\Settings\Config.xml"
"C:\Users\Username2\AppData\Local\MyApp\Settings\Config.xml"
"C:\Users\Username3\AppData\Local\MyApp\Settings\Config.xml"
我却收到以下错误:
Get-Content : Cannot find path 'C:\Users\C:\Users\AppData\Local\MyApp\Settings\Config.xml' because it does not exist.
At C:\Users\mastaxx\Desktop\test.ps1:9 char:6
+ $y = Get-Content -Path $Path
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\C:\Use...ings\Config.xml:String) [Get-Content], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
我在这里似乎愚蠢的假设是 $Users 是"C:\Users"
(我相信是因为我已定义它)并且 $Username 是"Username1"
(显然不是)。相反,我可以看到它也是"C:\Users"
这种情况,使得构建的路径是这个错误的路径:
C:\Users\C:\Users\AppData\Local\MyApp\Settings\Config.xml
我希望 foreach 循环将里面的每个文件夹视为$Users
单独的对象,并成为$Username
每个循环实例,这样我就可以将其插入到配置文件中,$path
如下所示:
$Users $Username
↓ ↓
C:\Users\Username1\AppData\Local\MyApp\Settings\Config.xml
我不太确定我做错了什么,但我知道我肯定做了一些愚蠢的事情。如果有谁有更好的 PS 技能,能帮我指出来,我会非常感激吗?
答案1
我设法弄清楚了我在等式中缺少 Get-Childitem。
这是正确的方法,尽管我确信我的 PS 需要进行重大改进,因为我无法获得正确格式的 CSV 来导出,所以我选择了混乱的方法,即为每个 true 实例输出一个单独的 CSV,但至少它有效!
$computers = Get-Content -Path "C:\computers.txt"
foreach ($comp in $computers) {
$i = "\\$comp\C$\Users\"
$AppData = "\AppData\Local\MyApp\Settings\Config.xml"
$text = "Text I'm Looking For*"
Get-ChildItem -Path $i
Foreach ($folder in Get-Childitem $i)
{
$ReadConfig = Get-Content -Path "$i$folder$AppData"
If ($ReadConfig -match $text)
{
out-file "c:\results\$comp $folder.csv"
}
else
{
"false"
}
}
}