如何在 C:/Users 中的每个用户名的 get-content 命令上返回 true/false?

如何在 C:/Users 中的每个用户名的 get-content 命令上返回 true/false?

我们希望消除每个用户 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"
}
}
}

相关内容