Как вернуть true/false в команде get-content для каждого имени пользователя внутри C:/Users?

Как вернуть true/false в команде get-content для каждого имени пользователя внутри C:/Users?

Мы хотим исключить существование плохого файла конфигурации, который мы обнаружили (и также иметь ручное исправление) из папки appdata каждого пользователя. Файл конфигурации существует только здесь и там, а не у каждого пользователя. Поэтому я пытаюсь собрать воедино скрипт, который будет возвращать true/false, если указанный текст совпадает с get-content в config.xml. Я хочу запустить это для каждого профиля пользователя на каждой машине и вывести результаты в 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 для экспорта, поэтому я выбрал неудобный подход, который заключался в выводе отдельного CSV для каждого экземпляра true, но, по крайней мере, это работает!

$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"
}
}
}

Связанный контент