Queremos eliminar a existência de um arquivo de configuração incorreto que identificamos (e também temos a correção manual) de cada pasta appdata de usuários. O arquivo de configuração só existe aqui e ali e não dentro de cada usuário. Então, estou tentando montar um script que retornará true/false se o texto especificado corresponder a get-content no config.xml. Eu quero executar isso em cada perfil de usuário em todas as máquinas e gerar resultados para csv.
Até agora eu me deparei com um problema. Ainda aprendendo powershell, então qualquer ajuda é muito 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 você pode ver, ainda não cheguei à parte csv porque não consigo obter o caminho correto para gerar para obter conteúdo.
Em vez de ter o caminho correto que eu esperava que o loop foreach funcionasse, seria:
"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"
Em vez disso, estou recebendo o seguinte erro:
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
Minha suposição aparentemente boba aqui é que $Users seria "C:\Users"
(o que eu acredito que é porque eu o defini) e $Username seria "Username1"
(o que claramente não é). Em vez disso, posso ver que também é "C:\Users"
neste caso, tornando o caminho que está sendo construído para ser incorreto:
C:\Users\C:\Users\AppData\Local\MyApp\Settings\Config.xml
Eu esperava que o loop foreach tratasse cada pasta dentro $Users
como um objeto individual e se tornasse a $Username
instância de cada loop, permitindo que eu a inserisse no arquivo de configuração $path
assim:
$Users $Username
↓ ↓
C:\Users\Username1\AppData\Local\MyApp\Settings\Config.xml
Não tenho certeza do que estou fazendo de errado, mas sei que definitivamente estou fazendo algo bobo aqui. Gostaria muito de alguém com melhores habilidades de PS para ajudar a apontar isso?
Eu consegui descobrir que estava faltando Get-Childitem na equação.
Esta é a maneira correta de fazer isso, embora eu tenha certeza de que meu PS precisa de uma grande melhoria, pois não consegui obter um CSV formatado corretamente para exportar, então optei pela abordagem confusa que era produzir um CSV individual para cada instância de true, mas pelo menos funciona!