Question
Scanner les lecteurs mappé, connecter un lecteur
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 1 mois #16900
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Scanner les lecteurs mappé
Une amélioration, si on souhaite éviter de reconstruire la liste des drives dispo :
[code:1]
#Liste des drives dispo au démarrage du traitement
#Suppose qu'aucun autre traitement crée en // des drives
$FreeDrives=Get-NextFreeDrive
#Liste FIFO
$RemainingDrives=New-Object System.Collections.Queue(,$FreeDrives)
Write-Warning \"Début du traitement: $($RemainingDrives.Count)\"
$RemainingDrives
Write-Warning \"Prochain Drive dispo\"
$RemainingDrives.Dequeue()
Write-Warning \"Les drives restant : $($RemainingDrives.Count)\"
$RemainingDrives
[/code:1]
Reste à modifier la ligne de création :
[code:1]
(New-Object -ComObject WScript.Network).(($RemainingDrives.Dequeue()), $_, $false, $login, $pass) }
[/code:1]
6ratgus écrit:
En cas de gestion d'erreur utiliser $RemainingDrives.Peek() suivi de Dequeue() s'il n'y a pas eu d'erreur.
[code:1]
#Liste des drives dispo au démarrage du traitement
#Suppose qu'aucun autre traitement crée en // des drives
$FreeDrives=Get-NextFreeDrive
#Liste FIFO
$RemainingDrives=New-Object System.Collections.Queue(,$FreeDrives)
Write-Warning \"Début du traitement: $($RemainingDrives.Count)\"
$RemainingDrives
Write-Warning \"Prochain Drive dispo\"
$RemainingDrives.Dequeue()
Write-Warning \"Les drives restant : $($RemainingDrives.Count)\"
$RemainingDrives
[/code:1]
Reste à modifier la ligne de création :
[code:1]
(New-Object -ComObject WScript.Network).(($RemainingDrives.Dequeue()), $_, $false, $login, $pass) }
[/code:1]
6ratgus écrit:
Oui tant qu'il n'y a pas d'erreurj'ai pas tester le script final tu me dira si ca marche bien !
En cas de gestion d'erreur utiliser $RemainingDrives.Peek() suivi de Dequeue() s'il n'y a pas eu d'erreur.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Droxolf
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 12 ans 1 mois #16910
par Droxolf
Réponse de Droxolf sur le sujet Re:Scanner les lecteurs mappé
merci 
Bon avec tout ce que vous m'avez donné comme info. J'ai essayé de le refaire mais je suis bloquer à ce niveau là :
[code:1]$base = @(
\"\\srv-ctrx-063\c$\",
\"\\srv-ctx6-203\c$\",
\"\\srv-ctrx-063\c$\",
\"\\srv-ctrx-199\c$\",
\"\\srv-ctx6-199\c$\",
\"\\srv-ctx6-101\c$\",
\"\\srv-ctx6-102\c$\",
\"\\srv-ctx6-103\c$\",
\"\\srv-ctx6-104\c$\",
\"\\srv-ctx6-105\c$\",
\"\\srv-ctx6-106\c$\",
\"\\srv-ctx6-107\c$\",
\"\\srv-ctx6-108\c$\",
\"\\srv-ctx6-109\c$\",
\"\\srv-ctx6-110\c$\",
\"\\srv-ctx6-111\c$\",
\"\\srv-ctx6-112\c$\",
\"\\srv-ctx6-113\c$\",
\"\\srv-ctx6-114\c$\",
\"\\srv-ctx6-115\c$\",
\"\\srv-ctx6-116\c$\",
\"\\srv-ctx6-117\c$\",
\"\\srv-ctx6-118\c$\",
\"\\srv-ctx6-119\c$\",
\"\\srv-ctx6-120\c$\",
\"\\srv-ctx6-121\c$\",
\"\\srv-ctx6-122\c$\",
\"\\srv-ctx6-123\c$\",
\"\\srv-ctx6-124\c$\",
\"\\srv-ctx6-206\c$\"
)
function Get-NextFreeDrive
{
68..90 | ForEach-Object { \"$([char]$_):\" } |
Where-Object { 'h:', 'k:', 'z:' -notcontains $_ } |
Where-Object { (new-object System.IO.DriveInfo $_).DriveType -eq 'noRootdirectory' }
}
$login=\"toto\"
$pass=\"1234\"
# liste des mappages actuel
$map_actu = Get-WmiObject -Class Win32_LogicalDisk -Filter \"DriveType=4\" | foreach {$_.ProviderName}
# comparaison avec la base de ref
$map_compare = Compare-Object -referenceobject $map_actu -DifferenceObject $base
foreach($drive in $map_compare)
{
$connection = New-Object -com Wscript.Network
$connection.MapNetworkDrive((Get-NextFreeDrive)[0],$drive, $false,$login,$pass)
}[/code:1]
quand je fais un déboguage la valeur de mon $drive est :
[code:1]
Input object SideIndicator
\\srv-ctx6-203\c$ =>
[/code:1]
c'est bien evidement ce que me renvoit le $map_compare
Il faudrait que $drive soit sous la forme
[code:1]
\\srv-ctx6-203\c$
[/code:1]
pour qu'il puisse connecter le lecteur.
<br><br>Message édité par: Droxolf, à: 10/02/14 17:59
Bon avec tout ce que vous m'avez donné comme info. J'ai essayé de le refaire mais je suis bloquer à ce niveau là :
[code:1]$base = @(
\"\\srv-ctrx-063\c$\",
\"\\srv-ctx6-203\c$\",
\"\\srv-ctrx-063\c$\",
\"\\srv-ctrx-199\c$\",
\"\\srv-ctx6-199\c$\",
\"\\srv-ctx6-101\c$\",
\"\\srv-ctx6-102\c$\",
\"\\srv-ctx6-103\c$\",
\"\\srv-ctx6-104\c$\",
\"\\srv-ctx6-105\c$\",
\"\\srv-ctx6-106\c$\",
\"\\srv-ctx6-107\c$\",
\"\\srv-ctx6-108\c$\",
\"\\srv-ctx6-109\c$\",
\"\\srv-ctx6-110\c$\",
\"\\srv-ctx6-111\c$\",
\"\\srv-ctx6-112\c$\",
\"\\srv-ctx6-113\c$\",
\"\\srv-ctx6-114\c$\",
\"\\srv-ctx6-115\c$\",
\"\\srv-ctx6-116\c$\",
\"\\srv-ctx6-117\c$\",
\"\\srv-ctx6-118\c$\",
\"\\srv-ctx6-119\c$\",
\"\\srv-ctx6-120\c$\",
\"\\srv-ctx6-121\c$\",
\"\\srv-ctx6-122\c$\",
\"\\srv-ctx6-123\c$\",
\"\\srv-ctx6-124\c$\",
\"\\srv-ctx6-206\c$\"
)
function Get-NextFreeDrive
{
68..90 | ForEach-Object { \"$([char]$_):\" } |
Where-Object { 'h:', 'k:', 'z:' -notcontains $_ } |
Where-Object { (new-object System.IO.DriveInfo $_).DriveType -eq 'noRootdirectory' }
}
$login=\"toto\"
$pass=\"1234\"
# liste des mappages actuel
$map_actu = Get-WmiObject -Class Win32_LogicalDisk -Filter \"DriveType=4\" | foreach {$_.ProviderName}
# comparaison avec la base de ref
$map_compare = Compare-Object -referenceobject $map_actu -DifferenceObject $base
foreach($drive in $map_compare)
{
$connection = New-Object -com Wscript.Network
$connection.MapNetworkDrive((Get-NextFreeDrive)[0],$drive, $false,$login,$pass)
}[/code:1]
quand je fais un déboguage la valeur de mon $drive est :
[code:1]
Input object SideIndicator
\\srv-ctx6-203\c$ =>
[/code:1]
c'est bien evidement ce que me renvoit le $map_compare
Il faudrait que $drive soit sous la forme
[code:1]
\\srv-ctx6-203\c$
[/code:1]
pour qu'il puisse connecter le lecteur.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 1 mois #16914
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Scanner les lecteurs mappé
Pointe la propriété qui t'intéresse et pas l'objet
[code:1]
$drive.inputobject[/code:1]
[code:1]
$drive.inputobject[/code:1]
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Droxolf
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 12 ans 1 mois #16941
par Droxolf
Réponse de Droxolf sur le sujet Re:Scanner les lecteurs mappé
merci. mon script avance.
J'aimerais maintenant savoir s'il est possible de déconnecter tout les lecteurs de la base une fois que je clique la \"croix\" de ma form.
J'aimerais maintenant savoir s'il est possible de déconnecter tout les lecteurs de la base une fois que je clique la \"croix\" de ma form.
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 1 mois #16942
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Scanner les lecteurs mappé
Droxolf écrit:
Le bouton close de la fenêtre de la console Powershell ?
Quelle croix de quelle form ?la \"croix\" de ma form.
Le bouton close de la fenêtre de la console Powershell ?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Droxolf
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 7
- Remerciements reçus 0
il y a 12 ans 1 mois #16944
par Droxolf
Réponse de Droxolf sur le sujet Re:Scanner les lecteurs mappé
j'ai creé une form dans mon script.
voilà un bout de code
[code:1]$form1 = New-Object System.Windows.Forms.Form
$button1 = New-Object System.Windows.Forms.Button
$listBox1 = New-Object System.Windows.Forms.ListBox
$listBox2 = New-Object System.Windows.Forms.ListBox
$radioButton1 = New-Object System.Windows.Forms.RadioButton
$radioButton2 = New-Object System.Windows.Forms.RadioButton
$radioButton3 = New-Object System.Windows.Forms.RadioButton
$radioButton4 = New-Object System.Windows.Forms.RadioButton
$radioButton5 = New-Object System.Windows.Forms.RadioButton
$radioButton6 = New-Object System.Windows.Forms.RadioButton
$radioButton7 = New-Object System.Windows.Forms.RadioButton
$radioButton8 = New-Object System.Windows.Forms.RadioButton
$radioButton9 = New-Object System.Windows.Forms.RadioButton
$radioButton10 = New-Object System.Windows.Forms.RadioButton
$radioButton11 = New-Object System.Windows.Forms.RadioButton
$messagebox = New-Object System.Windows.Forms.MessageBox
$objLabel = New-Object System.Windows.Forms.Label
$objLabel2 = New-Object System.Windows.Forms.Label
$objLabel3 = New-Object System.Windows.Forms.Label
$objLabel4 = New-Object System.Windows.Forms.Label
[/code:1]
quand je lance mon script, ma fenêtre s'ouvre et je peux faire différente actions (copier des fichiers, lancer des scripts...) donc moi ce que je veux au final, c'est quand mon script se lance il mappe tous les drives. et quand je referme ma fenêtre il déconnecte tous les drive correspondant de ma base.
voilà un bout de code
[code:1]$form1 = New-Object System.Windows.Forms.Form
$button1 = New-Object System.Windows.Forms.Button
$listBox1 = New-Object System.Windows.Forms.ListBox
$listBox2 = New-Object System.Windows.Forms.ListBox
$radioButton1 = New-Object System.Windows.Forms.RadioButton
$radioButton2 = New-Object System.Windows.Forms.RadioButton
$radioButton3 = New-Object System.Windows.Forms.RadioButton
$radioButton4 = New-Object System.Windows.Forms.RadioButton
$radioButton5 = New-Object System.Windows.Forms.RadioButton
$radioButton6 = New-Object System.Windows.Forms.RadioButton
$radioButton7 = New-Object System.Windows.Forms.RadioButton
$radioButton8 = New-Object System.Windows.Forms.RadioButton
$radioButton9 = New-Object System.Windows.Forms.RadioButton
$radioButton10 = New-Object System.Windows.Forms.RadioButton
$radioButton11 = New-Object System.Windows.Forms.RadioButton
$messagebox = New-Object System.Windows.Forms.MessageBox
$objLabel = New-Object System.Windows.Forms.Label
$objLabel2 = New-Object System.Windows.Forms.Label
$objLabel3 = New-Object System.Windows.Forms.Label
$objLabel4 = New-Object System.Windows.Forms.Label
[/code:1]
quand je lance mon script, ma fenêtre s'ouvre et je peux faire différente actions (copier des fichiers, lancer des scripts...) donc moi ce que je veux au final, c'est quand mon script se lance il mappe tous les drives. et quand je referme ma fenêtre il déconnecte tous les drive correspondant de ma base.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.050 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Scanner les lecteurs mappé, connecter un lecteur