我们希望从每个用户的 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 部分,因为我无法获得为获取内容生成的正确路径。
而不是拥有我希望的正确路径,因为 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 技能的人帮助指出这一点?
我设法弄清楚我在等式中缺少Get-Childitem。
这是正确的方法,尽管我确信我的 PS 需要进行重大改进,因为我无法导出格式正确的 CSV,所以我选择了输出单个 CSV 的混乱方法每个实例都是真的,但至少它有效!