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 #22507
par JAMON
Réponse de JAMON sur le sujet Re:[Script Diffusion]
Re-Bonjour,
j'ai fais ça, vous pensez que c'est bon ou je suis à coté de la plaque? :
[code:1]# ###############################################################
# Program : AMAJ.PS1
# Authors : Darkdams
# Date : 13/10/2016
# Subject : Porjet Alerte MAJ
# 13/10/16 : Affichage de l'image
#
# ###############################################################
# ======================================
# =
# = Affichage de l'image dans un PopUp (dans la variable $sendmessage)
# =
# ======================================
$sendmessage ={
[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 = \"Alerte 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();
}
$credential = Get-Credential
$username = $credential.UserName
$password = [Runtime.InteropServices.Marshal]::«»PtrToStringAuto([Runtime.InteropServices.Marshal]::«»SecureStringToBSTR($credential.Password))
while($true)
{
$csvFile = \"C:\Temp\listemachines.csv\"
$sucess = \"Connection OK.\"
[array]$renameList = Import-Csv -Path $csvFile
$renameList | Where-Object {$_.ReturnString -ne $sucess} | ForEach-Object `
{
if(Test-Connection $_ -Count 2)
{
$session = New-PSSession -ComputerName $_ -Credential $credential
$result = Invoke-Command -Session $session -ScriptBlock $sendMessage
Remove-PSSession -Session $session
$_.ReturnString = \"\"
if($result -eq 1)
{
$_.ReturnString = \"Ok\"
$_.ReturnString = $returnValue[0]
}
if($result -eq 2)
{
$_.ReturnString = \"Cancelled\"
}
if($result -eq 32000)
{
$_.ReturnString = \"Timed Out\"
}
}
}
$renameList | Export-Csv $csvFile
} [/code:1]
en plus j'ai une question, est ce qu'il faut un compte admin pour l'exécuter ? si oui comment je le renseigne directement dans le fichier ?
j'ai fais ça, vous pensez que c'est bon ou je suis à coté de la plaque? :
[code:1]# ###############################################################
# Program : AMAJ.PS1
# Authors : Darkdams
# Date : 13/10/2016
# Subject : Porjet Alerte MAJ
# 13/10/16 : Affichage de l'image
#
# ###############################################################
# ======================================
# =
# = Affichage de l'image dans un PopUp (dans la variable $sendmessage)
# =
# ======================================
$sendmessage ={
[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 = \"Alerte 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();
}
$credential = Get-Credential
$username = $credential.UserName
$password = [Runtime.InteropServices.Marshal]::«»PtrToStringAuto([Runtime.InteropServices.Marshal]::«»SecureStringToBSTR($credential.Password))
while($true)
{
$csvFile = \"C:\Temp\listemachines.csv\"
$sucess = \"Connection OK.\"
[array]$renameList = Import-Csv -Path $csvFile
$renameList | Where-Object {$_.ReturnString -ne $sucess} | ForEach-Object `
{
if(Test-Connection $_ -Count 2)
{
$session = New-PSSession -ComputerName $_ -Credential $credential
$result = Invoke-Command -Session $session -ScriptBlock $sendMessage
Remove-PSSession -Session $session
$_.ReturnString = \"\"
if($result -eq 1)
{
$_.ReturnString = \"Ok\"
$_.ReturnString = $returnValue[0]
}
if($result -eq 2)
{
$_.ReturnString = \"Cancelled\"
}
if($result -eq 32000)
{
$_.ReturnString = \"Timed Out\"
}
}
}
$renameList | Export-Csv $csvFile
} [/code:1]
en plus j'ai une question, est ce qu'il faut un compte admin pour l'exécuter ? si oui comment je le renseigne directement dans le fichier ?
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 #22512
par Philippe
bon il semble que ton script de base (le premier que tu a présenté et qui affiche le popup) ne fonctionnera pas sur des postes distant ! voir ce sujet et celui ci
j'ai cherche sur d'autre forum sans succès !

d'abord on va faire un test sur un PC puis on regardera pour l'ensemble des PCs
j'ai donc des questions pour toi :
- veut tu affiché ce message de MàJ depuis un script obligatoirement ?
- a tu un compte administrateur identique sur tous les postes et le connais tu ?
a tu des firewall et es que celui de windows est désactivé ?
- a tu PowerShell sur tous les postes ? quel versions ? et est il configuré pour exécuté des script à distance et non signé ?
- doit-il être exécuté à l'ouverture de session utilisateur ou faut-il l'affiché à n'importe quel moment ?
- est tu en domaine ?
- a tu le temps d'attendre l'adaptation du script que je t'est déjà parlé !?
pour la dernière question, je suis en formation et donc très peu dispo jusqu'au 2 novembre. je regarde déjà le Send-TSMessageBox pour le comprendre et répondre a tes questions
je crois que pour le moment ça ira pour les questions !
Réponse de Philippe sur le sujet Re:[Script Diffusion]
c'est bon mais ....!!!!j'ai fais ça, vous pensez que c'est bon ou je suis à coté de la plaque? :
bon il semble que ton script de base (le premier que tu a présenté et qui affiche le popup) ne fonctionnera pas sur des postes distant ! voir ce sujet et celui ci
j'ai cherche sur d'autre forum sans succès !
ok, alors on va faire ça ensemble comme des debutants !!je vais paraître stupide mais je suis un Zero en dev...
d'abord on va faire un test sur un PC puis on regardera pour l'ensemble des PCs
pour le compte, je sais pas mais je pense que ouien plus j'ai une question, est ce qu'il faut un compte admin pour l'exécuter ? si oui comment je le renseigne directement dans le fichier ?
j'ai donc des questions pour toi :
- veut tu affiché ce message de MàJ depuis un script obligatoirement ?
- a tu un compte administrateur identique sur tous les postes et le connais tu ?
a tu des firewall et es que celui de windows est désactivé ?
- a tu PowerShell sur tous les postes ? quel versions ? et est il configuré pour exécuté des script à distance et non signé ?
- doit-il être exécuté à l'ouverture de session utilisateur ou faut-il l'affiché à n'importe quel moment ?
- est tu en domaine ?
- a tu le temps d'attendre l'adaptation du script que je t'est déjà parlé !?
pour la dernière question, je suis en formation et donc très peu dispo jusqu'au 2 novembre. je regarde déjà le Send-TSMessageBox pour le comprendre et répondre a tes questions
je crois que pour le moment ça ira pour les questions !
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 #22515
par JAMON
Réponse de JAMON sur le sujet Re:[Script Diffusion]
veux tu affiché ce message de MàJ depuis un script obligatoirement ?
Non pas obligatoirement, j'ai pensé à un script justement pour faciliter mais je reste ouvert à toutes proposition(pas coquines hein ! ;p )
- as tu un compte administrateur identique sur tous les postes et le connais tu ?
Oui
as tu des firewall et es que celui de windows est désactivé ?
Full Open en interne
- as tu PowerShell sur tous les postes ? quel versions ? et est il configuré pour exécuté des script à distance et non signé ?
postes en Win7 pro 64Bit et Win8 pro 64Bit (powershell d'origine des OS) donc V4 pour les postes en win8
pour la config à distance et non signés eu... je sais pas...
- doit-il être exécuté à l'ouverture de session utilisateur ou faut-il l'affiché à n'importe quel moment ?
lorsque je décide de l'éxécuter (un bat sur le bureau qui appel le ps1) XD sachant que je veux que l'image pop aussi sur mon écran (excuse pour une pause café
- es tu en domaine ?
Oui
- as tu le temps d'attendre l'adaptation du script que je t'est déjà parlé !?
C.A.D ?
c'est ce que j'essaie de faire nan ? XD
Vraiment merci pour ton aide car je rame XD
Non pas obligatoirement, j'ai pensé à un script justement pour faciliter mais je reste ouvert à toutes proposition(pas coquines hein ! ;p )
- as tu un compte administrateur identique sur tous les postes et le connais tu ?
Oui
as tu des firewall et es que celui de windows est désactivé ?
Full Open en interne
- as tu PowerShell sur tous les postes ? quel versions ? et est il configuré pour exécuté des script à distance et non signé ?
postes en Win7 pro 64Bit et Win8 pro 64Bit (powershell d'origine des OS) donc V4 pour les postes en win8
pour la config à distance et non signés eu... je sais pas...
- doit-il être exécuté à l'ouverture de session utilisateur ou faut-il l'affiché à n'importe quel moment ?
lorsque je décide de l'éxécuter (un bat sur le bureau qui appel le ps1) XD sachant que je veux que l'image pop aussi sur mon écran (excuse pour une pause café
- es tu en domaine ?
Oui
- as tu le temps d'attendre l'adaptation du script que je t'est déjà parlé !?
C.A.D ?
c'est ce que j'essaie de faire nan ? XD
Vraiment merci pour ton aide car je rame XD
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 #22517
par Philippe
Réponse de Philippe sur le sujet Re:[Script Diffusion]
merci pour tes réponses
comme je t'ai signalé dans ton premier script ne pourra pas être utilisé
j'ai déjà fait un test avec ce script en tant qu'admin du domaine et il fonctionne bien :
[code:1]
[array]$Listpc = \"pc-de-test\"
$sendMessage = {
Function Send-TSMessageBox
{param([int]$SessionId, [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
}
$title = \"Operation de MàJ en cours\"
$message = \"The IT Dept needs to rename this computer. A reboot will be required! Please save all documents and click OK.\"
Send-TSMessageBox -Title $title -Message $message -ButtonSet 0 -WaitResponse $false -Timeout 60
}
$Listpc | Where-Object {$_ -ne $null} | ForEach-Object {
if (Test-Connection $_ -Count 2) {
Write-Host \"$_ ok\"
$session = New-PSSession -ComputerName $_
$result = Invoke-Command -Session $session -ScriptBlock $sendMessage
Remove-PSSession -Session $session
}
}
[/code:1]
si tu n'est pas admin du domaine on peut modifier pour utilisé un utilisateur admin des postes
il n'affiche pas d'image mais un text
je regarde des que possible insertion d'une image
pour l'utilisation sur tous les pc du domaine il me faudrait une dernière info : les serveurs de domaine sont t-il en 2008R2 ou plus recent ?<br><br>Message édité par: 6ratgus, à: 19/10/16 17:59
comme je t'ai signalé dans ton premier script ne pourra pas être utilisé
j'ai déjà fait un test avec ce script en tant qu'admin du domaine et il fonctionne bien :
[code:1]
[array]$Listpc = \"pc-de-test\"
$sendMessage = {
Function Send-TSMessageBox
{param([int]$SessionId, [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
}
$title = \"Operation de MàJ en cours\"
$message = \"The IT Dept needs to rename this computer. A reboot will be required! Please save all documents and click OK.\"
Send-TSMessageBox -Title $title -Message $message -ButtonSet 0 -WaitResponse $false -Timeout 60
}
$Listpc | Where-Object {$_ -ne $null} | ForEach-Object {
if (Test-Connection $_ -Count 2) {
Write-Host \"$_ ok\"
$session = New-PSSession -ComputerName $_
$result = Invoke-Command -Session $session -ScriptBlock $sendMessage
Remove-PSSession -Session $session
}
}
[/code:1]
si tu n'est pas admin du domaine on peut modifier pour utilisé un utilisateur admin des postes
il n'affiche pas d'image mais un text
je regarde des que possible insertion d'une image
pour l'utilisation sur tous les pc du domaine il me faudrait une dernière info : les serveurs de domaine sont t-il en 2008R2 ou plus recent ?<br><br>Message édité par: 6ratgus, à: 19/10/16 17:59
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 #22519
par JAMON
Réponse de JAMON sur le sujet Re:[Script Diffusion]
Bonjour,
Les DC sont en windows serveur 2012R2 std
Les DC sont en windows serveur 2012R2 std
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 #22520
par JAMON
Réponse de JAMON sur le sujet Re:[Script Diffusion]
Du coup j'ai une autre idée pour que ça fonctionne mais faut voir ...
en gros, je divise mon script en 2 :
1) 1 script pour l'affichage du popup (en local sur tous les poste avec le répertoire d'images du coup on aurait un bat qui lance le powershell.
2) 1 script pour exécuter le premier script sur tous les postes distant.
en gros, je divise mon script en 2 :
1) 1 script pour l'affichage du popup (en local sur tous les poste avec le répertoire d'images du coup on aurait un bat qui lance le powershell.
2) 1 script pour exécuter le premier script sur tous les postes distant.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.053 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Script Diffusion]