Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1604 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6  7  8
Auteur Sujet :

Powershell[Topic Unik]

n°2329958
gamer-fou
AHHHHHH§§§!!!
Posté le 04-03-2019 à 01:08:56  profilanswer
 

Reprise du message précédent :
Write-progress, mais ça ne permet que d'afficher une  valeur que tu recuperes par ailleurs... a toi de trouver comment et d'intégrer ça dans une boucle.


---------------
Music is the most high!
mood
Publicité
Posté le 04-03-2019 à 01:08:56  profilanswer
 

n°2330253
ASinglePie
Moi , j'aimes quand ca claque
Posté le 09-03-2019 à 19:54:08  profilanswer
 

gamer-fou a écrit :

Write-progress, mais ça ne permet que d'afficher une  valeur que tu recuperes par ailleurs... a toi de trouver comment et d'intégrer ça dans une boucle.


hm hmmmm .3.

n°2330299
doum
Mentalita nissarda
Posté le 11-03-2019 à 09:31:13  profilanswer
 

true-wiwi a écrit :

Ça a fait le boulot au final ?

 

Savoir si du coup je le rajoute en FP :jap:

 

Yes

n°2330317
true-wiwi
Posté le 11-03-2019 à 14:48:08  profilanswer
 

Je rajoute ça au FP dans la soirée :jap:


---------------
It's a simple mistake to make, to create love and to fall.
n°2333254
Profil sup​primé
Posté le 08-05-2019 à 15:06:07  answer
 

Lancer un script PS par GPO avec l'onglet PS fait pour...  Y'a un conf particulière?

 

J'ai un script de suppression d'AppxPackage qui fonctionne quand je le lance sur le poste.
Bien sûr avec le paramètre "-ExecutionPolicy bypass"

 

Dans la gpo,  j'ai tenté en ajoutant ce paramètre mais rien de mieux...
Et je ne vois aucun message dans l'observateur...  Je trouve ça bizarre...   :O

 

C'est une gpo au démarrage de l'ordinateur,  le problème pourrait venir de là?  Il faudrait à l'ouverture de session  (même si je vois pas pourquoi  :O)

n°2333257
true-wiwi
Posté le 08-05-2019 à 15:35:22  profilanswer
 

Alors toute la subtilité c'est d'arriver à piger que le script de la gpo doit se placer à la main dans le dossier de la GPO concernée.
 
Ça ne fonctionne pas directement en utilisant l'interface graphique du gestionnaire de gpo.
 
C'est assez ouf d'ailleurs :o
 
Du moins ça ne fonctionne pas sous Windows Server 2016.


---------------
It's a simple mistake to make, to create love and to fall.
n°2333258
Profil sup​primé
Posté le 08-05-2019 à 15:38:00  answer
 

Oui comme le bat non?
Enfin tu le copies dans le chemin de la gpo, qui s'ouvre directement avec le bouton "afficher les fichiers".

 

Tu parles de ça où j'ai raté un truc?

 

En tout cas,  je le mets bien dans le dossier de la gpo.  Et je pointe dessus avec le parcourir...  Enfin comme un script bat de création de lecteurs...


Message édité par Profil supprimé le 08-05-2019 à 15:38:59
n°2333259
Je@nb
Kindly give dime
Posté le 08-05-2019 à 16:06:42  profilanswer
 

Il s'exécute ou pas ? Genre en début de script tu écris une connerie dans un fichier.

n°2333263
Profil sup​primé
Posté le 08-05-2019 à 16:34:10  answer
 

Si je l'exécute sur le poste oui, sur la gpo, aucune trace dans l'observateur et les logiciels sont toujours présents.. :(
Je pensais au début que c'était un problème sur le script mais je verrai quelque chose sur l'observateur...

 

C'est un script tout bête à base de remove-appxpackage dans une boucle for each avec une liste... En extension ps1.

 

Je pourrais tenter d'ajouter une commande au début demain genre création d'un fichier à la racine du C.


Message édité par Profil supprimé le 08-05-2019 à 16:35:07
n°2333264
Je@nb
Kindly give dime
Posté le 08-05-2019 à 16:41:21  profilanswer
 

c'est ce que je te dis de faire oui (enfin je doute que la racine du c soit le meilleur emplacement ...)


Message édité par Je@nb le 08-05-2019 à 16:41:40
mood
Publicité
Posté le 08-05-2019 à 16:41:21  profilanswer
 

n°2333269
Profil sup​primé
Posté le 08-05-2019 à 17:15:14  answer
 

Ok je teste ça demain.  Rien d'autre à faire à part le placer dans la gpo?
Même pas besoin de gérer l'executionPolicy?

n°2333270
Je@nb
Kindly give dime
Posté le 08-05-2019 à 17:17:10  profilanswer
 

Bah le déclarer dans la GPO qd même oui :D. Suffit pas de mettre un ps1 dans un dossier quoi.
Après j'ai pas souvenir de devoir gérer l'execution policy mais je t'avoue que je m'en souviens plus du tout, ça fait des années que je dégage systématiquement des startup scripts/login script et j'aurai encore moins utilisé des GPO pour ce genre de conneries, ça n'a rien à faire là

n°2333271
Profil sup​primé
Posté le 08-05-2019 à 17:22:09  answer
 

Bah je sais... Ça me plaît pas vraiment de faire comme ça... C'est en test et je continue de chercher d'autres pistes... Comme lancer cette commande à distance par power Shell directement...

 

En fait, je passe la 1809 par wsus et il m'ajoute 3/4 logiciels de m***** comme barre de jeu, etc...
Du coup ce script est en plus à lancer qu'une seule fois à la fin de cette maj...
Mais wsus est pas paramétrable pour ça et je n'ai pas sccm....

 

Si t'as une autre idée je suis preneur :O
C'est pour 400 PC  :D


Message édité par Profil supprimé le 08-05-2019 à 17:22:54
n°2333272
Je@nb
Kindly give dime
Posté le 08-05-2019 à 17:41:08  profilanswer
 

Qu'est ce que tu t'en branles qu'il y ait une barre de jeu franchement ? :/
sinon tu déploies le script sur le poste et une tache planifiée
ton idée de lancer cette commande à distance c'est encore pire que ta gpo franchement

n°2333274
Profil sup​primé
Posté le 08-05-2019 à 17:52:04  answer
 

C'est pas mon choix de virer toutes les saloperies win10...
Après faut dire aussi que MS est casse couille d'en rajouter....  Le master est niquel et derrière tu te retrouves à gérer ça...  :/

 

Ok je vais essayer de voir ça avec le déploiement avant une tâche planifiée.

 

Merci!

n°2349537
Kiks
Posté le 25-03-2020 à 21:35:25  profilanswer
 

:hello:  
 
Le même script (mappage de lecteurs réseau) qui :
- fonctionne correctement via l'ISE
- fonctionne partiellement via le menu contextuel/Exécuter avec Powershell (le seul défaut, c'est les accès aux lecteurs réseau qui sont KO)
- ne s’exécute même pas à l'ouverture de session (bien que correctement mis dans gpedit)
 
J'ai un autre script qui doit s’exécuter à l'ouverture de session, celui-là fonctionne parfaitement.
 
Vous pensez que ça vient de quoi ?
 
J'ai mis la full lecture pour les scripts : Set-ExecutionPolicy Bypass
 
Des idées ?


---------------
Topic Unique - Amazon - Mules HFR Alsace - Achats-Ventes (Hardware) - Achats-Ventes (Divers)
n°2349543
true-wiwi
Posté le 25-03-2020 à 23:14:14  profilanswer
 

Tu peux poster ton script voir ?


---------------
It's a simple mistake to make, to create love and to fall.
n°2349544
Je@nb
Kindly give dime
Posté le 25-03-2020 à 23:29:59  profilanswer
 

Pk utiliser powershell pour du Map réseau? Les gpp sont faites pour ça.
Et qu'est ce qui te dit que le script ne s'exécute pas ? C'est pas juste ton mappage qui marche pas car chemin pas encore accessible ?

n°2349568
Kiks
Posté le 26-03-2020 à 09:34:05  profilanswer
 

true-wiwi a écrit :

Tu peux poster ton script voir ?


 
Le voici :
 
Profitez en si vous voyez des conneries/aberrations  :jap:  
 

Citation :

# Variables
$Utilisateur = "XXX"
$Mdp ="MDP"
$Serveur = "\\IPSERVEUR\"
 
$TableauLettre = "M","P","S","U","Z"
$TableauPartage = "Media","Photos","Scans","Donnees","Config"
 
$SecureString = ConvertTo-SecureString $Mdp -AsPlainText -Force
 
# Boucle pour supprimer et mapper les lecteurs réseaux
for ($i = 0; $i -le 4; $i++)
{
 
$LettrePath = $TableauLettre[$i] + ":"
$UNC = $Serveur + $TableauPartage[$i]
 
# Suppression des lecteurs réseaux déjà montés
If (Test-Path $LettrePath){
    Remove-PSDrive $TableauLettre -force
}
 
# Mappage des lecteurs réseaux
 
$Credentials = New-Object System.Management.Automation.PSCredential $Utilisateur, $SecureString
New-PSDrive -name $TableauLettre[$i] -PSProvider FileSystem -Root $UNC -Persist -Credential $Credentials
 
}


 

Je@nb a écrit :

Pk utiliser powershell pour du Map réseau? Les gpp sont faites pour ça.


Ça fonctionne ça sans environnement AD ?
J'ai vite zieuté dans gpedit.msc, rien trouvé  :??:  
 

Je@nb a écrit :

Et qu'est ce qui te dit que le script ne s'exécute pas ?


Mea culpa, le 2ème script s’exécute bien.
Pour tester, j'ai rajouté l'ouverture de Thunderbird en fin de  script, et il s'ouvre bien.  [:yann39]  
 

Je@nb a écrit :

C'est pas juste ton mappage qui marche pas car chemin pas encore accessible ?


Dans le 1er script (qui fonctionne), je lui demande de récupérer un fichier sur un partage SMB du style \\IPSERVEUR\Config\Thunderbird.
Ou à l'inverse de copier un fichier local vers le serveur.
Les 2 actions fonctionnent  [:yann39]
 
En tout cas, merci pour votre aide !  [:cerveau charlest]


Message édité par Kiks le 26-03-2020 à 09:34:34

---------------
Topic Unique - Amazon - Mules HFR Alsace - Achats-Ventes (Hardware) - Achats-Ventes (Divers)
n°2349581
true-wiwi
Posté le 26-03-2020 à 10:40:29  profilanswer
 

T'as vérifié que l'utilisateur a les droits d'exécution du script pour ton problème à l'ouverture de session ?


---------------
It's a simple mistake to make, to create love and to fall.
n°2349629
Kiks
Posté le 26-03-2020 à 12:38:32  profilanswer
 

Quand j'ouvre une console Powershell depuis la session (sans ouvrir en tant qu'administrateur)
 

Citation :

Get-ExecutionPolicy
Bypass


 
------------------------------
 
En fait, là, actuellement, en exécutant le script en faisant clic droit/Exécuter avec Powershell, les lecteurs réseaux sont bien mappés.
Les accès fonctionnent bien, les lecteurs restent mappés.
 
J'ai rajouté un "sleep 10" le temps de tester.
 
Au bout des 10 secondes, tous les lecteurs se déconnectent.
Comme si au moment où la console Powershell se ferme, il perdait les informations d'authentification
 :??:
 
Edit : il y a du mieux en rajoutant "-Scope "Global"" à la fin de la ligne New-PSDrive
Les lecteurs restent en place, même après fermeture de la console Powershell
 
 [:hodjeur]
 
Plus qu'à trouver ce qui ne fonctionne pas à l'ouverture de session


Message édité par Kiks le 26-03-2020 à 17:31:12

---------------
Topic Unique - Amazon - Mules HFR Alsace - Achats-Ventes (Hardware) - Achats-Ventes (Divers)
n°2349708
Kiks
Posté le 27-03-2020 à 01:07:40  profilanswer
 

Problème résolu  [:nozdormu]  
 
A priori, c'était un problème de périmètre d'exécution du script.
En fonction de qui le lançait (ouverture de session, ISE ou utilisateur via le menu contextuel), ça rendait les lecteurs réseaux visibles en fonction des profils.
Par exemple, en exécutant un "net use" via un cmd en tant qu'administrateur, je voyais les lecteurs qui étaient invisibles dans l'explorateur de la session actuelle.
 
Cet article m'a aidé : https://www.powershellmagazine.com/ [...] owershell/
 
Du coup, suppression du mode protégé

Citation :

New-ItemProperty -Path HKLM:\Software\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLUA -Value 0 -Force


Attention, je ne dis pas que c'est la meilleure solution, mais pour moi, elle me convient.
 
Script complet pour ceux que ça intéresse :

Citation :

# Variables
$Utilisateur = "USER"
$Mdp ="MDP"
$Serveur = "\\IPSERVEUR\"
 
# Tableaux
$TableauLettre = "M","P","S","U","Z"
$TableauPartage = "Media","Photos","Scans","Donnees","Config"
 
$SecureString = ConvertTo-SecureString $Mdp -AsPlainText -Force
$Credentials = New-Object System.Management.Automation.PSCredential $Utilisateur, $SecureString
 
# Boucle pour mapper les lecteurs réseaux
for ($i = 0; $i -le 4; $i++)
{
    # Concaténation du serveur et du partage
    $UNC = $Serveur + $TableauPartage[$i]
     
    # Mappage des lecteurs réseaux
    New-PSDrive -name $TableauLettre[$i] -PSProvider FileSystem -Root $UNC -Persist -Credential $Credentials -Scope "Global"
}


Message édité par Kiks le 27-03-2020 à 01:08:17

---------------
Topic Unique - Amazon - Mules HFR Alsace - Achats-Ventes (Hardware) - Achats-Ventes (Divers)
n°2349711
Je@nb
Kindly give dime
Posté le 27-03-2020 à 08:17:35  profilanswer
 

Non désactiver l'uac c'est inadmissible et si ça te convient c'est que tu n'as rien compris a la fonctionnalité...
Tu as qu'à lancer ton script en utilisateur standard ou au pire désactiver juste la fonctionnalité d'isolation des Map réseau

n°2349850
Kiks
Posté le 27-03-2020 à 20:59:37  profilanswer
 

Je t'avoue en avoir eu marre et quand j'ai vu que ça marchait, bingo :o
Mais je suis repassé sur la solution des raccourcis dans "Démarrage" - raccourcis qui appellent les scripts .ps1 , ne t'inquiète pas  [:gidoin]  
 

Citation :

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File "C:\Users\XXX\Documents\Scripts\LecteursReseau.ps1"


 
C'est quand même dommage de ne pas pouvoir utiliser la fonction présente dans gpedit.msc  :(
 

Citation :

ou au pire désactiver juste la fonctionnalité d'isolation des Map réseau


Ça ne me dit rien, c'est quoi ? le paramètre -scope "Global" ?


---------------
Topic Unique - Amazon - Mules HFR Alsace - Achats-Ventes (Hardware) - Achats-Ventes (Divers)
n°2349853
Je@nb
Kindly give dime
Posté le 27-03-2020 à 21:23:52  profilanswer
 
n°2349857
Kiks
Posté le 27-03-2020 à 23:45:22  profilanswer
 

[:athome] Wow, un grand merci  
 
J'avais tout cherché, j'étais tombé sur des liens qui parlaient de lecteurs réseaux invisibles. Mais ce lien, je ne l'avais pas
 
Sympa de ta part en tout cas !  :jap:


---------------
Topic Unique - Amazon - Mules HFR Alsace - Achats-Ventes (Hardware) - Achats-Ventes (Divers)
n°2350304
-Poison-
Arrière garde HFRienne
Posté le 31-03-2020 à 11:46:56  profilanswer
 

Hello,

 

J'ai un petit soucis avec un script PS, je ne comprends pas pourquoi.
Je ne suis pas du tout un expert, je prends des bouts de code qui m'intéressent à droite à gauche pour avoir le résultat que j'aimerais.

 

Voici le code :

 
Code :
  1. $OUPath= Get-ADOrganizationalUnit -ldapfilter '(name=*)' -SearchBase "OU=Test,OU=Utilisateurs,OU=Titi,DC=TOTO,DC=local" | ? {$_.distinguishedname -notmatch 'OU=_Désactivés'}
  2. $OuName = Get-ADOrganizationalUnit -filter * -SearchBase $OUPath | Select-Object Name
  3. $UserNumber= "1"
  4. write-host $OuName";"$UserNumber
 

Résultat affiché :

 
Code :
  1. @{Name=Test};1
 

Résultat que j'aimerais :

 
Code :
  1. Test;1
 

Pourquoi est-ce qu'il me met mon Test entre @{Name=} ?

 

Merci d'avance !

 

Edit : Aide trouvée ailleurs, problème résolu.

Message cité 1 fois
Message édité par -Poison- le 01-04-2020 à 14:58:33

---------------
2 + 2 = 5
n°2350305
darkbeldin
Posté le 31-03-2020 à 11:54:26  profilanswer
 

$OUPath | Select-Object Name c'est pas plutot  un tiret a la place du pipe?


---------------
Je te dis pas que c'est pas injuste, je te dis juste que ça soulage
n°2350309
Je@nb
Kindly give dime
Posté le 31-03-2020 à 13:14:13  profilanswer
 

-Poison- a écrit :

Hello,

 

J'ai un petit soucis avec un script PS, je ne comprends pas pourquoi.
Je ne suis pas du tout un expert, je prends des bouts de code qui m'intéressent à droite à gauche pour avoir le résultat que j'aimerais.

 



Dans ce cas je t'invite à suivre une formation plutôt que tenter des trucs en espérant que ça tombe en marche sur un malentendu sans comprendre ce que tu fais tout en étant super crado...

n°2350310
-Poison-
Arrière garde HFRienne
Posté le 31-03-2020 à 14:13:07  profilanswer
 

Je@nb a écrit :


Dans ce cas je t'invite à suivre une formation plutôt que tenter des trucs en espérant que ça tombe en marche sur un malentendu sans comprendre ce que tu fais tout en étant super crado...


 
Oui bien sur, je vais faire une formation pour quelque chose de ponctuel comme ma présente demande.
Merci pour ton aide.


---------------
2 + 2 = 5
n°2351630
teratron
Posté le 13-04-2020 à 13:18:23  profilanswer
 

[:lardoncru]

n°2352077
gamer-fou
AHHHHHH§§§!!!
Posté le 19-04-2020 à 16:56:11  profilanswer
 

Dans la série "on en apprend tous les jours" : quand on fait une comparaison avec $null, $null devrait être à gauche de l'opérateur de comparaison.
J'ai absolument jamais fait comme ca et j'ai pas dû le croiser souvent dans les scripts des autres :D
https://github.com/PowerShell/PSScr [...] ithNull.md

Message cité 1 fois
Message édité par gamer-fou le 19-04-2020 à 16:57:01

---------------
Music is the most high!
n°2352081
Je@nb
Kindly give dime
Posté le 19-04-2020 à 17:58:56  profilanswer
 

Ouais c'est pas ultra connu et rarement fait :D.
 
Tiens pour ceux qui veulent apprendre PowerShell, j'ai découvert ça : https://github.com/vexx32/PSKoans
Très didactique, pratique.

n°2352094
doum
Mentalita nissarda
Posté le 19-04-2020 à 22:41:11  profilanswer
 

gamer-fou a écrit :

Dans la série "on en apprend tous les jours" : quand on fait une comparaison avec $null, $null devrait être à gauche de l'opérateur de comparaison.
J'ai absolument jamais fait comme ca et j'ai pas dû le croiser souvent dans les scripts des autres :D
https://github.com/PowerShell/PSScr [...] ithNull.md


 
oui d'ailleurs si tu le fais pas visual studio code gueule
 
c'est comme ca que je l'ai decouvert, et du coup maintenant je m'y suis fait
mais c'est clair que je l'ia pas vu souvent dans le bon sens

n°2352484
Saguu
Posté le 24-04-2020 à 23:43:11  profilanswer
 

Vous utilisez PSScript Analyzer ?  
 
 
https://github.com/PowerShell/PSScriptAnalyzer

n°2352486
Je@nb
Kindly give dime
Posté le 24-04-2020 à 23:59:50  profilanswer
 

biensûr, intégré à vscode

n°2417238
gamer-fou
AHHHHHH§§§!!!
Posté le 12-05-2022 à 14:25:58  profilanswer
 

Je réveille le topic pour rappeler à quel point les hashtables c'est le bien [:love_yvele]

 

Contexte : une API qui renvoie des dizaines de milliers de lignes, qu'il faut enrichir avec des données issues de plusieurs .csv en se basant sur des id présents à la fois dans les retours de l'API et dans les csv.
A la base le script faisait un classique $blabla = ($csv | where ($_.id -eq $retourApi.id).Blabla et prenait environ 10min à traiter les 40 000 entrées.
Après le passage du contenu du csv en hashtables et une utilisation avec $blabla = $csvHashTable.($retourApi.id).Blabla , le même traitement passe à 4 secondes [:love_yvele]

 

Ou comment passer pour un magicien auprès des collègues :lol:


Message édité par gamer-fou le 12-05-2022 à 14:26:58

---------------
Music is the most high!
n°2417239
true-wiwi
Posté le 12-05-2022 à 14:30:47  profilanswer
 

Nice  :D


---------------
It's a simple mistake to make, to create love and to fall.
n°2420188
arnuche
Posté le 21-06-2022 à 10:17:15  profilanswer
 

Bonjour,
 
y a-t-il moyen de changer l'ordre des mots et chiffres dans des noms de fichiers en fonction d'un pattern dont la place change selon les fichiers ?
C'est parce que j'ai des fichiers dont le nom contient une date qui se trouve au milieu ou à la fin du nom et j'aimerais qu'elle se retrouve après le premier mot.
J'ai trouvé cet exemple ;
https://superuser.com/questions/122 [...] f-filename
Sauf que là c'est basique parce qu'il y a des tirets et qu'il coupe sur les tirets.
Dans mon cas il y a des tas de fichiers aux noms assez différents mais avec un point commun, une date (toujours précédée d'un espace) et l'heure dans un format précis ;
18 03 25 18h42 (= 25 mars 2018)
Je voudrais par exemple passer de :
voiture bleue 18 03 25 18h42 salut.txt
à
voiture 18 03 25 18h42 bleue salut.txt
 
Mon idée est de pouvoir identifier ce pattern (et ça je peux le faire puisque je l'ai déjà utilisé pour supprimer la date dans le nom de certains fichiers) et de le caser derrière le premier espace, comme on avait fait là ;
https://forum.hardware.fr/hfr/Progr [...] 8249_1.htm
Sauf que là c'était pour rajouter la date de création du fichier alors que maintenant je dois utiliser une date déjà dans le nom (qui n'est ni la date de création ni celle de modification du fichier).
 
Ma 1ère idée était d'adapter l'idée de Je@nb et de rajouter un 2ème pattern pour remplacer le 1er espace (1er pattern) par la date (2ème pattern), du genre ;

Code :
  1. [regex]$pattern1 = "\s"
  2. [regex]$pattern2 = "(\s)(\d{2})(\s)(\d{2})(\s)(\d{2})(\s)(\d{2})h(\d{2})"
  3. Get-Childitem -Path "K:\test" | ForEach-Object { $_ | Rename-Item -NewName ($pattern1.replace($_ , "$pattern2 ", 1))}


J'aurais donc la date en double dans le nom mais j'ai un code qui marche pour effacer la dernière occurrence d'un pattern, donc je procéderais en 2 étapes.
 
Sauf qu'il y a un message d'erreur ("impossible de renommer le fichier qui correspond à un chemin d'accès" ou un truc dans le genre). C'est visiblement dû au style du pattern2 mais cette commande fonctionne si je remplace le pattern2 par un mot, du genre ;

Code :
  1. [regex]$pattern1 = "\s"
  2. [regex]$pattern2 = " bonjour "
  3. Get-Childitem -Path "K:\test" | ForEach-Object { $_ | Rename-Item -NewName ($pattern1.replace($_ , "$pattern2", 1))}


Ce qui en partant de ;
chaussette verte 40.jpg
donne bien ;
chaussette bonjour verte 40.jpg
Sauf que dans ce cas-là ça n'a aucun intérêt, autant n'avoir qu'un seul pattern (pour l'espace) et mettre " bonjour " à la place de "$pattern2" dans la dernière ligne, ça revient au même. Mais c'est juste pour montrer que la commande à 2 patterns fonctionne.
 
Et pourtant cette structure est reconnue dans un autre style de commande, comme je disais plus haut, par exemple pour l'effacer du nom ;

Code :
  1. Get-Childitem -Path "K:\test" | ForEach-Object { $_ | Rename-Item -NewName {$_.name -replace "(\s)(\d{2})(\s)(\d{2})(\s)(\d{2})(\s)(\d{2})h(\d{2})", "" }}


 
Mais en tant que pattern ça coince, une idée de la raison ?

n°2420201
rorosk
Posté le 21-06-2022 à 11:00:26  profilanswer
 

Je ne suis pas sûr d'avoir compris, donc désolé si je répond à coté.
Déjà je ne comprend pas cette ligne :

Get-Childitem -Path "K:\test" | ForEach-Object { $_ | Rename-Item -NewName ($pattern1.replace($_ , "$pattern2 ", 1))}

Tu utilises une regex comme chaîne de remplacement ?
 
Sinon à mon avis, ça ne sert à rien parfois de s'acharner à faire un "one line code" avec des regex, une alternative simple pour insérer après le premier mot est tout simplement d'utiliser IndexOf et Insert, exemple (encore une fois si je n'ai pas trop mal compris) :

$exemples = @(
    "voiture bleue 18 03 25 18h42 salut.txt ",
    "voiture verte rouge 18 03 25 18h42 jaune 19 04 26 19h53 salut.txt",
    "voiture verte sans date.txt" )
 
[regex]$pattern = " \d{2} \d{2} \d{2} \d{2}h\d{2}"
 
$exemples  | % {  
    if ($_ -match $pattern) {
        $_ = $pattern.Replace($_, "", 1)
        $_.Insert($_.IndexOf(" " ), $Matches[0])
    } else {
        $_
    }
}


Résultat :
La première date trouvée est insérée après le premier mot (certains edge case pas testés ici, par exemple date en début du nom).

voiture 18 03 25 18h42 bleue salut.txt
voiture 18 03 25 18h42 verte rouge jaune 19 04 26 19h53 salut.txt
voiture verte sans date.txt


Message édité par rorosk le 21-06-2022 à 11:02:12
n°2420216
arnuche
Posté le 21-06-2022 à 12:25:33  profilanswer
 

Merci !
Je crois que tu as bien compris  :) , le but est d'aller chercher la date dans le nom et de la mettre derrière le premier mot.
 
Mais là c'est moi qui suis un peu perdu, je ne connais pas ce genre de scripts, les miens sont en général sur une seule ligne (voire 2 avec le regex).
Concrètement je fais comment pour en faire un batch (donc désigner un dossier comme dans mon exemple) ?
Et faut-il passer par une liste d'exemples comme au début de ton script ?
 

Citation :

Tu utilises une regex comme chaîne de remplacement ?


Là c'était un exemple mais l'idée vient de là ;
https://forum.hardware.fr/hfr/Progr [...] m#t2419185

Message cité 1 fois
Message édité par arnuche le 21-06-2022 à 12:28:43
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6  7  8

Aller à :
Ajouter une réponse
 

Sujets relatifs
Créer un lien hypertexte en powershellRemplacer une lettre dans .txt POWERSHELL
Comment faire un saut à la ligne PowershellRécupérer la date du résultat [POWERSHELL]
[POWERSHELL] Récupérer les utilisateurs sur un serveur TSE[Powershell] Récupérer SID
Faire des scripts quant ta 0 connaissance =( PowerShell[PowerShell] Script de colorisation de syllabes
Powershell - unrestricted mais erreur de droits d'execution[Powershell] recuperer un argument
Plus de sujets relatifs à : Powershell[Topic Unik]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR