![¿Cómo devuelvo verdadero/falso en el comando get-content para cada nombre de usuario dentro de C:/Users?](https://rvso.com/image/1672345/%C2%BFC%C3%B3mo%20devuelvo%20verdadero%2Ffalso%20en%20el%20comando%20get-content%20para%20cada%20nombre%20de%20usuario%20dentro%20de%20C%3A%2FUsers%3F.png)
Queremos eliminar la existencia de un archivo de configuración incorrecto que hemos identificado (y también tenemos la solución manual) dentro de la carpeta de datos de aplicaciones de cada usuario. El archivo de configuración sólo existe aquí y allá y no dentro de cada usuario. Así que estoy tratando de armar un script que devolverá verdadero/falso si el texto especificado coincide con get-content en config.xml. Quiero ejecutar esto en cada perfil de usuario en cada máquina y enviar los resultados a csv.
Hasta ahora me he encontrado con un problema. Todavía estoy aprendiendo PowerShell, por lo que cualquier ayuda será muy apreciada.
$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"
}
}
Como puede ver, todavía no he llegado a la parte csv porque no puedo obtener la ruta correcta para generar get-content.
En lugar de tener la ruta correcta que esperaba a medida que funcionaba el bucle foreach, sería:
"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"
En cambio, recibo el siguiente error:
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
Mi suposición aparentemente tonta aquí es que $Users sería "C:\Users"
(que creo que es porque lo he definido) y $Username sería "Username1"
(que claramente no lo es). En cambio, puedo ver que también es "C:\Users"
en este caso, lo que hace que la ruta que se está construyendo sea incorrecta:
C:\Users\C:\Users\AppData\Local\MyApp\Settings\Config.xml
Esperaba que el bucle foreach tratara cada carpeta interna $Users
como un objeto individual y se convirtiera $Username
en la instancia de cada bucle, permitiéndome insertarlo en el archivo de configuración $path
de esta manera:
$Users $Username
↓ ↓
C:\Users\Username1\AppData\Local\MyApp\Settings\Config.xml
No estoy del todo seguro de qué estoy haciendo mal, pero sé que definitivamente estoy haciendo algo tonto. ¿Agradecería mucho que alguien con mejores habilidades de PS me ayudara a señalarlo?
Respuesta1
Me las arreglé para descubrir que me faltaba Get-Childitem en la ecuación.
Esta es la forma correcta de hacerlo, aunque estoy seguro de que mi PS necesita una mejora importante, ya que no pude exportar un CSV con el formato adecuado, así que opté por el enfoque complicado que consistía en generar un CSV individual para cada caso es verdadero, ¡pero al menos funciona!
$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"
}
}
}