Question
[Script Diffusion]
- JAMON
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 15
- Remerciements reçus 0
il y a 9 ans 5 mois #22485
par JAMON
[Script Diffusion] a été créé par JAMON
Bonjour,
je souhaite faire un script qui lorsque je l'exécute fasse plusieurs choses :
1 - Affiche une image dans une fenêtre popup qui apparait au milieu de l'écran (pour la fenêtre c'est bon j'ai réussi
) avec :
[code:1]# ###############################################################
# Script : AMAJ.PS1
# Auteur : Darkdams
# Date : 13/10/2016
# Sujet : PopUp Alerte MAJ
# 13/10/16 : Affichage de l'image
#
# ###############################################################
# ======================================
# =
# = Autorisation d'exécution du script
# =
# ======================================
Set-ExecutionPolicy unrestricted -force
# ======================================
# =
# = Affichage de l'image dans un PopUp
# =
# ======================================
[void][reflection.assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
$file = (get-item \"C:\Temp\test2.jpg\"«»)
$img = [System.Drawing.Image]::Fromfile($file);
[System.Windows.Forms.Application]::EnableVisualStyles();
$form = new-object Windows.Forms.Form
$form.Text = \"Attention MAJ en cours\"
$form.Width = $img.Size.Width;
$form.Height = $img.Size.Height;
$pictureBox = new-object Windows.Forms.PictureBox
$pictureBox.Width = $img.Size.Width;
$pictureBox.Height = $img.Size.Height;
$pictureBox.Image = $img;
$form.controls.add($pictureBox)
$form.Add_Shown( { $form.Activate() } )
$form.ShowDialog()[/code:1]
2 - Envoyer à toutes les machines présentes sur le réseau ce popup (en broadcast ou autre)pour que ça s'affiche sur toutes les machine sur le réseau --> c'est la que je suis bloqué
D'avance merci ;)pour l'aide que vous pourrez m'apporter pour la deuxième partie de mon script
<br><br>Message édité par: Darkdams, à: 14/10/16 11:38
je souhaite faire un script qui lorsque je l'exécute fasse plusieurs choses :
1 - Affiche une image dans une fenêtre popup qui apparait au milieu de l'écran (pour la fenêtre c'est bon j'ai réussi
[code:1]# ###############################################################
# Script : AMAJ.PS1
# Auteur : Darkdams
# Date : 13/10/2016
# Sujet : PopUp Alerte MAJ
# 13/10/16 : Affichage de l'image
#
# ###############################################################
# ======================================
# =
# = Autorisation d'exécution du script
# =
# ======================================
Set-ExecutionPolicy unrestricted -force
# ======================================
# =
# = Affichage de l'image dans un PopUp
# =
# ======================================
[void][reflection.assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
$file = (get-item \"C:\Temp\test2.jpg\"«»)
$img = [System.Drawing.Image]::Fromfile($file);
[System.Windows.Forms.Application]::EnableVisualStyles();
$form = new-object Windows.Forms.Form
$form.Text = \"Attention MAJ en cours\"
$form.Width = $img.Size.Width;
$form.Height = $img.Size.Height;
$pictureBox = new-object Windows.Forms.PictureBox
$pictureBox.Width = $img.Size.Width;
$pictureBox.Height = $img.Size.Height;
$pictureBox.Image = $img;
$form.controls.add($pictureBox)
$form.Add_Shown( { $form.Activate() } )
$form.ShowDialog()[/code:1]
2 - Envoyer à toutes les machines présentes sur le réseau ce popup (en broadcast ou autre)pour que ça s'affiche sur toutes les machine sur le réseau --> c'est la que je suis bloqué
D'avance merci ;)pour l'aide que vous pourrez m'apporter pour la deuxième partie de mon script
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 5 mois #22487
par Philippe
Réponse de Philippe sur le sujet Re:[Script Diffusion]
salut Darkdams
dans cette gallery l'auteur a fait un script qui affiche un message même si aucun utilisateur n'est connecté ou simplement si il est sur l'écran de veille ! (pratique dans certain cas)
pour toi c'est l'exemple qui te sera utile principalement, puisque qu'il te montre comment utilisé sa fonction (dans ton cas ton script) sur des ordinateurs distants<br><br>Message édité par: 6ratgus, à: 17/10/16 16:17
Envoyer à toutes les machines présentes sur le réseau ce popup (en broadcast ou autre)pour que ça s'affiche sur toutes les machine sur le réseau --> c'est la que je suis bloqué
dans cette gallery l'auteur a fait un script qui affiche un message même si aucun utilisateur n'est connecté ou simplement si il est sur l'écran de veille ! (pratique dans certain cas)
pour toi c'est l'exemple qui te sera utile principalement, puisque qu'il te montre comment utilisé sa fonction (dans ton cas ton script) sur des ordinateurs distants<br><br>Message édité par: 6ratgus, à: 17/10/16 16:17
Connexion ou Créer un compte pour participer à la conversation.
- JAMON
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 15
- Remerciements reçus 0
il y a 9 ans 5 mois #22488
par JAMON
Réponse de JAMON sur le sujet Re:[Script Diffusion]
Bonjour,
Merciiiii
je fais des tests et vous tiens informés !
Merciiiii
je fais des tests et vous tiens informés !
Connexion ou Créer un compte pour participer à la conversation.
- JAMON
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 15
- Remerciements reçus 0
il y a 9 ans 5 mois #22489
par JAMON
Réponse de JAMON sur le sujet Re:[Script Diffusion]
Bonjour,
si je comprend bien, en faisant comme ça, ça doit fonctionner? (impossible de tester le script en prod pour le moment...) :
[code:1]# ###############################################################
# Program : AMAJ.PS1
# Authors : Darkdams
# Date : 13/10/2016
# Subject : Porjet Alerte MAJ
# 13/10/16 : Affichage de l'image
#
# ###############################################################
# ======================================
# =
# = Autorisation d'exécution du script
# =
# ======================================
Set-ExecutionPolicy unrestricted -force
# ======================================
# =
# = Affichage de l'image dans un PopUp
# =
# ======================================
Send-TSMessageBox -Title \"Attention\" -Message $popup
$popup ={
[void][reflection.assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
$file = (get-item \"C:\Temp\test2.jpg\")
$img = [System.Drawing.Image]::Fromfile($file);
[System.Windows.Forms.Application]::EnableVisualStyles();
$form = new-object Windows.Forms.Form
$form.Text = \"Attention MAJ en cours \"
$form.Width = $img.Size.Width;
$form.Height = $img.Size.Height;
$pictureBox = new-object Windows.Forms.PictureBox
$pictureBox.Width = $img.Size.Width;
$pictureBox.Height = $img.Size.Height;
$pictureBox.Image = $img;
$form.controls.add($pictureBox)
$form.Add_Shown( { $form.Activate() } )
$form.ShowDialog()
#$form.Show();
}
# ======================================
# =
# = Fonction d'emission du PopUp
# =
# ======================================
Function Send-TSMessageBox
{
param([string]$Title = \"Title\", [string]$Message = \"Message\", [int]$ButtonSet = 0, [int]$Timeout = 0, [bool]$WaitResponse = $false)
$Signature = @\"
[DllImport(\"wtsapi32.dll\", SetLastError = true)]
public static extern bool WTSSendMessage(
IntPtr hServer,
[MarshalAs(UnmanagedType.I4)] int SessionId,
String pTitle,
[MarshalAs(UnmanagedType.U4)] int TitleLength,
String pMessage,
[MarshalAs(UnmanagedType.U4)] int MessageLength,
[MarshalAs(UnmanagedType.U4)] int Style,
[MarshalAs(UnmanagedType.U4)] int Timeout,
[MarshalAs(UnmanagedType.U4)] out int pResponse,
bool bWait);
[DllImport(\"kernel32.dll\"«»)]
public static extern uint WTSGetActiveConsoleSessionId();
\"@
[int]$TitleLength = $Title.Length;
[int]$MessageLength = $Message.Length;
[int]$Response = 0;
$MessageBox = Add-Type -memberDefinition $Signature -name \"WTSAPISendMessage\" -namespace \"WTSAPI\" -passThru
$SessionId = $MessageBox::WTSGetActiveConsoleSessionId()
$MessageBox::WTSSendMessage(0, $SessionId, $Title, $TitleLength, $Message, $MessageLength, $ButtonSet, $Timeout, [ref] $Response, $WaitResponse) | Out-Null
$Response
}
[/code:1]<br><br>Message édité par: Darkdams, à: 17/10/16 16:14
si je comprend bien, en faisant comme ça, ça doit fonctionner? (impossible de tester le script en prod pour le moment...) :
[code:1]# ###############################################################
# Program : AMAJ.PS1
# Authors : Darkdams
# Date : 13/10/2016
# Subject : Porjet Alerte MAJ
# 13/10/16 : Affichage de l'image
#
# ###############################################################
# ======================================
# =
# = Autorisation d'exécution du script
# =
# ======================================
Set-ExecutionPolicy unrestricted -force
# ======================================
# =
# = Affichage de l'image dans un PopUp
# =
# ======================================
Send-TSMessageBox -Title \"Attention\" -Message $popup
$popup ={
[void][reflection.assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
$file = (get-item \"C:\Temp\test2.jpg\")
$img = [System.Drawing.Image]::Fromfile($file);
[System.Windows.Forms.Application]::EnableVisualStyles();
$form = new-object Windows.Forms.Form
$form.Text = \"Attention MAJ en cours \"
$form.Width = $img.Size.Width;
$form.Height = $img.Size.Height;
$pictureBox = new-object Windows.Forms.PictureBox
$pictureBox.Width = $img.Size.Width;
$pictureBox.Height = $img.Size.Height;
$pictureBox.Image = $img;
$form.controls.add($pictureBox)
$form.Add_Shown( { $form.Activate() } )
$form.ShowDialog()
#$form.Show();
}
# ======================================
# =
# = Fonction d'emission du PopUp
# =
# ======================================
Function Send-TSMessageBox
{
param([string]$Title = \"Title\", [string]$Message = \"Message\", [int]$ButtonSet = 0, [int]$Timeout = 0, [bool]$WaitResponse = $false)
$Signature = @\"
[DllImport(\"wtsapi32.dll\", SetLastError = true)]
public static extern bool WTSSendMessage(
IntPtr hServer,
[MarshalAs(UnmanagedType.I4)] int SessionId,
String pTitle,
[MarshalAs(UnmanagedType.U4)] int TitleLength,
String pMessage,
[MarshalAs(UnmanagedType.U4)] int MessageLength,
[MarshalAs(UnmanagedType.U4)] int Style,
[MarshalAs(UnmanagedType.U4)] int Timeout,
[MarshalAs(UnmanagedType.U4)] out int pResponse,
bool bWait);
[DllImport(\"kernel32.dll\"«»)]
public static extern uint WTSGetActiveConsoleSessionId();
\"@
[int]$TitleLength = $Title.Length;
[int]$MessageLength = $Message.Length;
[int]$Response = 0;
$MessageBox = Add-Type -memberDefinition $Signature -name \"WTSAPISendMessage\" -namespace \"WTSAPI\" -passThru
$SessionId = $MessageBox::WTSGetActiveConsoleSessionId()
$MessageBox::WTSSendMessage(0, $SessionId, $Title, $TitleLength, $Message, $MessageLength, $ButtonSet, $Timeout, [ref] $Response, $WaitResponse) | Out-Null
$Response
}
[/code:1]<br><br>Message édité par: Darkdams, à: 17/10/16 16:14
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 9 ans 5 mois #22493
par Philippe
Réponse de Philippe sur le sujet Re:[Script Diffusion]
pas vraiment !! 
mais d'abord ceci :
[code:1]Set-ExecutionPolicy unrestricted -force[/code:1]
c'est inutile dans ton script car ça indique a PowerShell d'exécuté des scripts non signé sans restriction/blocage. cette ligne étant dans un script c'est que tu est déjà en unrestricted ou que ton script est signé numériquement !
après pour ton script, c'est cette partie là que tu doit utilisé après l'avoir adapté :
[code:1]$credential = Get-Credential
$username = $credential.UserName
$password = [Runtime.InteropServices.Marshal]::«»PtrToStringAuto([Runtime.InteropServices.Marshal]::«»SecureStringToBSTR($credential.Password))
while($true)
{
$csvFile = \"C:\renameList.csv\"
$sucess = \"The command completed successfully.\"
[array]$renameList = Import-Csv -Path $csvFile
$renameList | Where-Object {$_.ReturnString -ne $sucess} | ForEach-Object `
{
if(Test-Connection $_.OldName -Count 2)
{
$session = New-PSSession -ComputerName $_.OldName -Credential $credential
$result = Invoke-Command -Session $session -ScriptBlock $sendMessage
Remove-PSSession -Session $session
$_.ReturnString = \"\"
if($result -eq 1)
{
[array]$returnValue = netdom renamecomputer $_.OldName /newname: $_.NewName /userd: $username /passwordd: $password /force /reboot
$_.ReturnString = $returnValue[0]
}
if($result -eq 2)
{
$_.ReturnString = \"Cancelled\"
}
if($result -eq 32000)
{
$_.ReturnString = \"Timed Out\"
}
}
}
$renameList | Export-Csv $csvFile
}
[/code:1]
pour résumé
- tu doit ouvrir une session avec New-PSSession
mettre ton code dans une variable ScriptBlock par exemple :
[code:1]$sendMessage =
{
void][reflection.assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
$file = (get-item \"C:\Temp\test2.jpg\"«»)
...
...
$form.ShowDialog()
}[/code:1]
puis exécuté ce ScriptBlock comme ça Invoke-Command -Session $session -ScriptBlock $sendMessage
enfin tu ferme la session avec Remove-PSSession -Session $session et tu passe à la machine suivant !!
le reste du script c'est de l'habillage pour la boucle qui balaye tous les postes par rapport à un fichier CSV, et des test si la machine est allumé et d'autre truc comme ça
si ta pas tous compris n'hésite pas à posé des questions
une dernier détail, dans ton script tu met la ligne suivante, n'oublie pas que le script sera exécuté directement sur la machine donc assure toi que l'image soit present en local sur la machine distante !!! :
[code:1]$file = (get-item \"C:\Temp\test2.jpg\"«»)[/code:1]<br><br>Message édité par: 6ratgus, à: 17/10/16 16:42
mais d'abord ceci :
[code:1]Set-ExecutionPolicy unrestricted -force[/code:1]
c'est inutile dans ton script car ça indique a PowerShell d'exécuté des scripts non signé sans restriction/blocage. cette ligne étant dans un script c'est que tu est déjà en unrestricted ou que ton script est signé numériquement !
après pour ton script, c'est cette partie là que tu doit utilisé après l'avoir adapté :
[code:1]$credential = Get-Credential
$username = $credential.UserName
$password = [Runtime.InteropServices.Marshal]::«»PtrToStringAuto([Runtime.InteropServices.Marshal]::«»SecureStringToBSTR($credential.Password))
while($true)
{
$csvFile = \"C:\renameList.csv\"
$sucess = \"The command completed successfully.\"
[array]$renameList = Import-Csv -Path $csvFile
$renameList | Where-Object {$_.ReturnString -ne $sucess} | ForEach-Object `
{
if(Test-Connection $_.OldName -Count 2)
{
$session = New-PSSession -ComputerName $_.OldName -Credential $credential
$result = Invoke-Command -Session $session -ScriptBlock $sendMessage
Remove-PSSession -Session $session
$_.ReturnString = \"\"
if($result -eq 1)
{
[array]$returnValue = netdom renamecomputer $_.OldName /newname: $_.NewName /userd: $username /passwordd: $password /force /reboot
$_.ReturnString = $returnValue[0]
}
if($result -eq 2)
{
$_.ReturnString = \"Cancelled\"
}
if($result -eq 32000)
{
$_.ReturnString = \"Timed Out\"
}
}
}
$renameList | Export-Csv $csvFile
}
[/code:1]
pour résumé
- tu doit ouvrir une session avec New-PSSession
mettre ton code dans une variable ScriptBlock par exemple :
[code:1]$sendMessage =
{
void][reflection.assembly]::LoadWithPartialName(\"System.Windows.Forms\"«»)
$file = (get-item \"C:\Temp\test2.jpg\"«»)
...
...
$form.ShowDialog()
}[/code:1]
puis exécuté ce ScriptBlock comme ça Invoke-Command -Session $session -ScriptBlock $sendMessage
enfin tu ferme la session avec Remove-PSSession -Session $session et tu passe à la machine suivant !!
le reste du script c'est de l'habillage pour la boucle qui balaye tous les postes par rapport à un fichier CSV, et des test si la machine est allumé et d'autre truc comme ça
si ta pas tous compris n'hésite pas à posé des questions
une dernier détail, dans ton script tu met la ligne suivante, n'oublie pas que le script sera exécuté directement sur la machine donc assure toi que l'image soit present en local sur la machine distante !!! :
[code:1]$file = (get-item \"C:\Temp\test2.jpg\"«»)[/code:1]<br><br>Message édité par: 6ratgus, à: 17/10/16 16:42
Connexion ou Créer un compte pour participer à la conversation.
- JAMON
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 15
- Remerciements reçus 0
il y a 9 ans 5 mois #22505
par JAMON
Réponse de JAMON sur le sujet Re:[Script Diffusion]
Bonjour,
je vais paraître stupide mais je suis un Zero en dev...
du coup ba je vois pas comment adapter car y a plein de trucs que je ne comprend pas
je vais paraître stupide mais je suis un Zero en dev...
du coup ba je vois pas comment adapter car y a plein de trucs que je ne comprend pas
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.055 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Script Diffusion]