Question logon.ps

Plus d'informations
il y a 5 ans 9 mois #25651 par paul
logon.ps a été créé par paul
Bonjour,

Je commence à m’intéresser à PowerShell depuis 1 mois.
Le plus urgent était pour moi de mettre en place un fichier « logon » pour connecter mes dossiers partagés en lecteur réseau sur les PC avec Windows Server.
J’ai toujours utilisé par facilité les commandes Net use :

[code:1]Net use * /d /y
Net use * \"\\serveurname\sharefolder\"[/code:1]

Mais je m’efforce à le remplacer pour les commandes PowerShell.
Voici mon code fonctionnel :

[code:1]
$ndriveobj = New-Object -Com wscript.network
$ndriveobj.RemoveNetworkDrive(\"G:\", $true, $true)
$ndriveobj.MapNetworkDrive(\"G:\", \"\\TRIESTE\home\", $true)
$ndriveobj.RemoveNetworkDrive(\"H:\", $true, $true)
$ndriveobj.MapNetworkDrive(\"H:\", \"\\TRIESTE\COMPTABILITE\", $true)[/code:1]

Voici le problème que je rencontre.
Je suis arrivé à la lettre Z soit

[code:1]$ndriveobj.MapNetworkDrive(\"Z:\", \"\\TRIESTE\HORAIRE\", $true)[/code:1]

Je me suis documenté et je ne retrouve pas l’astérisque si facile dans la commande Net use * .
Pouvez-vous m’aider, je sais qu’aucun n’aura pas plus de 5 connecteurs réseaux. Mais j’ai plus de 25 dossiers à partagés.

Merci<br><br>Message édité par: Arnaud, à: 20/06/18 13:50

Cordialement,
Domsheldon1
Belgium

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 ans 9 mois #25652 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:logon.ps
Salut,
voici un extrait d'un logonscript, le niveau est un peu plus avancé que le tiens, mais peut être y trouveras-tu réponse à ta question:
[code:1]
New-Variable -Name CurrentDate -Value ([Datetime]::Now) -Option ReadOnly -Scope script
New-Variable -Name DatasPath -Value '.\' -Option ReadOnly -Scope script
New-Variable -Name LogsPath -Value 'C:\Temp\Log' -Option ReadOnly -Scope script
New-Variable -Name PatternLogDirectoryName -Value '{0:MMyyyy}' -Option ReadOnly -Scope script
New-Variable -Name PatternLogFileName -Value '{0:ddMMyyy-HHmm}.Log' -Option ReadOnly -Scope script
New-Variable -Name LogFileName -value (\&quot;$LogsPath\$PatternLogDirectoryName\$PatternLogFileName\&quot; -F $CurrentDate) -Option ReadOnly -Scope script



function ValideDrivename{
#S'assure de la syntaxe d'un nom de drive
param([string]$Drive)
$Drive=$Drive.Trim().ToUpper()
if (-not $Drive.Contains(':') )
{ $Drive+=':'}
return $Drive
}


function New-NetworkDrive {
&lt;#
.synopsis
A function to create Networkdrives
.Example
New-NetworkDrive 'x' '\\localhost\C$'
.Example
New-NetworkDrive 'Y:' '\\localhost\C$\Windows'
#&gt;
Param(
[string]$Drive,
[string]$Unc
)
$Drive = ValideDrivename $Drive
try {
\&quot;Create network drive : $Drive on $Unc\&quot; &gt;&gt; $LogFileName
$global:WSNetWork.MapNetworkDrive($Drive, $Unc)
}
catch{
Write-Error $_.Exception.Message
@\&quot;
Un problème est survenu lors de la création lecteur réseau $Drive.
L'erreur était :
$_
\&quot;@ &gt;&gt; $LogFileName
}
}#New-NetworkDrive

function Get-NetworkDrives{
&lt;#
.synopsis
A function to list the currently mapped Networkdrives
.Example
Get-NetworkDrives
#&gt;
# try {
$mappedDrives = @{}
#l'appelant gére les possibles erreurs
$a = $global:WSNetWork.EnumNetworkDrives()
$anz = $a.count()

for ($i = 0; $i -lt $anz; $i = $i + 2)
{
$drive = $a.item($i)
$path = $a.item($i+1)
$mappedDrives[$drive] = $path
}
$mappedDrives

}#Get-NetworkDrives

function Remove-NetworkDrive{
param($Drive)
&lt;#
.synopsis
A function to remove Networkdrives
.Example
Remove-NetworkDrive X
.Example
Remove-NetworkDrive Y:
#&gt;
$Drive = ValideDrivename $Drive
try {
$global:WSNetWork.RemoveNetworkDrive($Drive)
}
catch{
Write-Error $_.Exception.Message
@\&quot;
Un problème est survenu lors de la suppression du lecteur réseau $Drive.
L'erreur était :
$_
\&quot;@ &gt;&gt; $LogFileName
}
}#Remove-NetworkDrive

function Remove-AllNetworkDrive
{
try {
$AllDrives=Get-NetworkDrives
$AllDrives.GetEnumerator()|
Foreach {
\&quot;Remove network drive : $($_.key)=$($_.value)\&quot; &gt;&gt; $LogFileName
Remove-NetworkDrive $_.Key
}
}
catch{
Write-Error $_.Exception.Message
@\&quot;
Un problème est survenu lors de la suppression des lecteurs réseau.
L'erreur était :
$_
\&quot;@ &gt;&gt; $LogFileName
}
}#Remove-AllNetworkDrive



#Objet de création de drive réseau
$global:WSNetWork = New-Object -ComObject WScript.Network
Remove-AllNetworkDrive


#pour $logname tu peux mettre 'c:\temp\test.log'

[/code:1]<br><br>Message édité par: Laurent Dardenne, à: 19/06/18 18:42

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 ans 9 mois #25654 par paul
Réponse de paul sur le sujet Re:logon.ps
Merci Laurent.
Je vais y passer ma soirée à comprendre ton code B)

Cordialement,
Domsheldon1
Belgium

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 ans 9 mois #25655 par paul
Réponse de paul sur le sujet Re:logon.ps
J'avoue que c'est plus compliqué que je ne le croyais!
A-t-il une autre façon plus simple ? Ou m'expliquer les étapes du code? :blush: :blink:
Merci

Cordialement,
Domsheldon1
Belgium

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 5 ans 9 mois #25658 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:logon.ps
Bonjour ami Belge !

Soit le bienvenu dans le forum !

Pourrais-tu être un peu plus clair car je ne suis pas sûr de bien comprendre tes questions ?

Je me suis documenté et je ne retrouve pas l’astérisque si facile dans la commande Net use * .


Que cherches tu à faire ? A déconnecter tous les lecteurs en une seule commande ?

Sache toutefois que PowerShell te permet l'exécution de n'importe quelle commande CMD (dont la commande NET). Donc si tu le souhaites tu peux continuer à utiliser Net Use ...

Après si tu préfères une solution 100% PowerShell, en effet ce sera un peu plus verbeux (d'où le script de Laurent).

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.

Plus d'informations
il y a 5 ans 9 mois #25663 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:logon.ps
domsheldon1 écrit:

J'avoue que c'est plus compliqué que je ne le croyais!

C'est de débuter qui l'est.
domsheldon1 écrit:

A-t-il une autre façon plus simple ?

Peut être, mais je ne fais pas de loginscript tous les jours, voir rarement.
domsheldon1 écrit:

Ou m'expliquer les étapes du code?

Oui, mais écrit moi déjà en pseudo code ce que tu veux réaliser. Des minis specs en qq sorte.

Et précise ce que tu ne comprends pas dans ce code. Il n'y a rien de sorcier ici, c'est juste que cela fait bcp d'un coup pour qui débute.

Le code reprend ton approche mais celui proposé est basé sur des fonctions avec une gestion d'erreur basique et un mini fichier de log en cas d'erreur.

Tu peux supprimer les lignes du type
New-Variable -Name CurrentDate et les remplacer par $LogFileName=TonPath

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.081 secondes
Propulsé par Kunena