Question
Script WMI et Credential
- Sylvain HUGUIN
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 15 ans 4 mois #8545
par Sylvain HUGUIN
Script WMI et Credential a été créé par Sylvain HUGUIN
Bonjour à tous,
J'avais créé un script powershell utilisant les classes WMI pour changer la configuration de la carte réseau (passage d'IP fixe à DHCP).
Cela fonctionnait parfaitement sur mon poste (normal je suis admin local) mais pas sur les postes en utilisateur restreint (normal aussi ...)
J'ai regardé alors pour le paramêtre -credential et la j'ai eu le message d'erreur classique 0x80041003 car un script utilisant les classes WMI en local ne peut aparement pas en profiter.
voici le script avec les credentials :
[code:1]$password = type C:\PowerShell\LOGON.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PsCredential \"administrateur\", $password
$INFO = Get-Content \"c:\IP5.txt\"
foreach ($myvar in $INFO)
{
$var = $myvar.split()
$var[0]
$var[1]
$var[2]
$var[3]
$var[4]
$IP = $var[0]
$MASK = $var[1]
$GATEWAY = $var[2]
$DNS1 = $var[3]
$DNS2 = $var[4]
}
$NICs = Get-WmiObject -Credential(\"$cred\"«») Win32_NetworkAdapterConfiguration | where { $_.IPEnabled -eq \"TRUE\" }
foreach ($NIC in $NICs)
{
$NIC.EnableStatic(\"$IP\", \"$MASK\"«»)
$NIC.SetGateways(\"$GATEWAY\"«»)
$DNSServers = \"$DNS1\", \"$DNS2\"
$NIC.SetDNSServerSearchOrder($DNSServers)
$NIC.SetDynamicDNSRegistration(\"TRUE\"«»)
}
###[/code:1]
Auriez-vous un autre moyen de faire la même chose avec une authentification ?
Merci par avance
Sylvain
J'avais créé un script powershell utilisant les classes WMI pour changer la configuration de la carte réseau (passage d'IP fixe à DHCP).
Cela fonctionnait parfaitement sur mon poste (normal je suis admin local) mais pas sur les postes en utilisateur restreint (normal aussi ...)
J'ai regardé alors pour le paramêtre -credential et la j'ai eu le message d'erreur classique 0x80041003 car un script utilisant les classes WMI en local ne peut aparement pas en profiter.
voici le script avec les credentials :
[code:1]$password = type C:\PowerShell\LOGON.txt | ConvertTo-SecureString
$cred = New-Object System.Management.Automation.PsCredential \"administrateur\", $password
$INFO = Get-Content \"c:\IP5.txt\"
foreach ($myvar in $INFO)
{
$var = $myvar.split()
$var[0]
$var[1]
$var[2]
$var[3]
$var[4]
$IP = $var[0]
$MASK = $var[1]
$GATEWAY = $var[2]
$DNS1 = $var[3]
$DNS2 = $var[4]
}
$NICs = Get-WmiObject -Credential(\"$cred\"«») Win32_NetworkAdapterConfiguration | where { $_.IPEnabled -eq \"TRUE\" }
foreach ($NIC in $NICs)
{
$NIC.EnableStatic(\"$IP\", \"$MASK\"«»)
$NIC.SetGateways(\"$GATEWAY\"«»)
$DNSServers = \"$DNS1\", \"$DNS2\"
$NIC.SetDNSServerSearchOrder($DNSServers)
$NIC.SetDynamicDNSRegistration(\"TRUE\"«»)
}
###[/code:1]
Auriez-vous un autre moyen de faire la même chose avec une authentification ?
Merci par avance
Sylvain
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 15 ans 4 mois #8546
par Arnaud Petitjean
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Réponse de Arnaud Petitjean sur le sujet Re:Script WMI et Credential
Bonjour Sylvain,
Sois le bienvenu dans le forum de la communauté PowerShell !
Qu'entends tu exactement par utilisateur restreint ?:
[code:1]Cela fonctionnait parfaitement sur mon poste (normal je suis admin local) mais pas sur les postes en utilisateur restreint (normal aussi ...)[/code:1]
Est-ce que tes postes sont dans le même domaine ? Quels sont les OS ?
Si tu es dans un domaine et que ton compte est dans le groupe Administrateurs local de ta machine distante, tu devrais pouvoir t'en sortir avec le paramètre -Credential de Get-WmiObject.
Sinon comme alternative tu peux utiliser le remoting PowerShell 2.0 pour que ta requête WMI s'exécute comme si elle était locale à ta machine distante.
Arnaud
Sois le bienvenu dans le forum de la communauté PowerShell !
Qu'entends tu exactement par utilisateur restreint ?:
[code:1]Cela fonctionnait parfaitement sur mon poste (normal je suis admin local) mais pas sur les postes en utilisateur restreint (normal aussi ...)[/code:1]
Est-ce que tes postes sont dans le même domaine ? Quels sont les OS ?
Si tu es dans un domaine et que ton compte est dans le groupe Administrateurs local de ta machine distante, tu devrais pouvoir t'en sortir avec le paramètre -Credential de Get-WmiObject.
Sinon comme alternative tu peux utiliser le remoting PowerShell 2.0 pour que ta requête WMI s'exécute comme si elle était locale à ta machine distante.
Arnaud
MVP PowerShell et créateur de ce magnifique forum
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?
Connexion ou Créer un compte pour participer à la conversation.
- Sylvain HUGUIN
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 15 ans 4 mois #8547
par Sylvain HUGUIN
Réponse de Sylvain HUGUIN sur le sujet Re:Script WMI et Credential
Bonjour Arnaud et merci de ta réponse.
par utilisateur restreint je voulais dire utilisateur standard au niveau des droits en local
Concernant les postes ce sont tous des portables sous XP SP3 avec .net 4 et powershell 2.
La problematique est que le script que je développais est pour des postes nomades qui ont besoin de pouvoir passer d'IP fixe à DHCP régulierement et je voulais que les utilisateurs puissent le faire eux-mêmes la configuration à distance étant impossible ... (le script aurais été encapsulé dans un exe)
Merci par avance et merci pour l'accueuil !
Sylvain
par utilisateur restreint je voulais dire utilisateur standard au niveau des droits en local
Concernant les postes ce sont tous des portables sous XP SP3 avec .net 4 et powershell 2.
La problematique est que le script que je développais est pour des postes nomades qui ont besoin de pouvoir passer d'IP fixe à DHCP régulierement et je voulais que les utilisateurs puissent le faire eux-mêmes la configuration à distance étant impossible ... (le script aurais été encapsulé dans un exe)
Merci par avance et merci pour l'accueuil !
Sylvain
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 4 mois #8552
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Script WMI et Credential
Tu pourrais t'en sortir en déportant toute la partie où tu modifies la configuration IP dans un script dédié, que tu lances dans un processus autonome avec les Credentials adéquats.
En imaginant que la partie config IP devient un script autonome set-ipconfiguration.ps1 sauvegardé dans le répertoire PowerShell à la racine du C:, ton script principal peut le lancer ainsi :
[code:1]
...
start-process powershell.exe -arg \"-file c:/powershell/set-ipconfiguration.ps1\" -cred $cred
[/code:1]
En imaginant que la partie config IP devient un script autonome set-ipconfiguration.ps1 sauvegardé dans le répertoire PowerShell à la racine du C:, ton script principal peut le lancer ainsi :
[code:1]
...
start-process powershell.exe -arg \"-file c:/powershell/set-ipconfiguration.ps1\" -cred $cred
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 4 mois #8553
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Script WMI et Credential
Hormis ton problème de credentials, j'ai un commentaire sur cette partie de ton script :
[code:1]
$NICs = Get-WmiObject -Credential(\"$cred\"«») Win32_NetworkAdapterConfiguration | where { $_.IPEnabled -eq \"TRUE\" }
foreach ($NIC in $NICs)
{
...
[/code:1]
Ta boucle foreach suppose que $NICS est un tableau, et donc que la requête WMI a retourné plusieurs objets. Ce n'est pas forcément le cas - même si sur les portables dont tu t'occupes il y a sans doute à la fois des cartes réseau locales filaire et sans fil, et des adaptateurs réseau virtuels pour les connexions distantes.
Une bonne pratique consiste quand même à s'assurer qu'on traite bien le cas particulier où on n'aurait qu'un élément retourné par la requête. Pour ce faire, il suffit de préciser que le résultat doit être présenté sous forme d'un tableau, en entourant la requête par @(...) :
[code:1]
$NICs = @(Get-WmiObject -Credential(\"$cred\"«») Win32_NetworkAdapterConfiguration | where {$_.IPEnabled})
[/code:1]
Ainsi, qu'on ait un élément ou dix ou même aucun, $NICS sera un tableau dans tous les cas.
Au passage, j'ai simplifié le where en virant le test -eq $true : IPEnabled est une valeur booléenne, on peut donc directement le tester sans ajouter de condition.
[code:1]
$NICs = Get-WmiObject -Credential(\"$cred\"«») Win32_NetworkAdapterConfiguration | where { $_.IPEnabled -eq \"TRUE\" }
foreach ($NIC in $NICs)
{
...
[/code:1]
Ta boucle foreach suppose que $NICS est un tableau, et donc que la requête WMI a retourné plusieurs objets. Ce n'est pas forcément le cas - même si sur les portables dont tu t'occupes il y a sans doute à la fois des cartes réseau locales filaire et sans fil, et des adaptateurs réseau virtuels pour les connexions distantes.
Une bonne pratique consiste quand même à s'assurer qu'on traite bien le cas particulier où on n'aurait qu'un élément retourné par la requête. Pour ce faire, il suffit de préciser que le résultat doit être présenté sous forme d'un tableau, en entourant la requête par @(...) :
[code:1]
$NICs = @(Get-WmiObject -Credential(\"$cred\"«») Win32_NetworkAdapterConfiguration | where {$_.IPEnabled})
[/code:1]
Ainsi, qu'on ait un élément ou dix ou même aucun, $NICS sera un tableau dans tous les cas.
Au passage, j'ai simplifié le where en virant le test -eq $true : IPEnabled est une valeur booléenne, on peut donc directement le tester sans ajouter de condition.
Connexion ou Créer un compte pour participer à la conversation.
- Sylvain HUGUIN
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 3
- Remerciements reçus 0
il y a 15 ans 4 mois #8554
par Sylvain HUGUIN
Réponse de Sylvain HUGUIN sur le sujet Re:Script WMI et Credential
Bonjour Janel ,
Merci pour tes réponses je m'en vais tester tout ca !
Merci pour tes réponses je m'en vais tester tout ca !
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.044 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Script WMI et Credential