Affichage des articles dont le libellé est powershell. Afficher tous les articles
Affichage des articles dont le libellé est powershell. Afficher tous les articles

mardi 10 décembre 2019

Powershell : activer les scripts






Si vous avez besoin d'activer des scripts powershell sur votre ordinateur et que celui-ci vous insulte voici de quoi le calmer :

Set-ExecutionPolicy Unrestricted
s'il est méchant:
à refaire en administrateur

sinon ajouter la clef suivante à la base de registre


Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell]
"ExecutionPolicy"="Unrestricted"



mercredi 6 novembre 2019

Powershell: fonction global





Vous voulez créer une fonction utilisable sur votre console même après l'avoir éteind ou redémarré le PC :

1°)Dans une console Powershell faites: 

test-path $profile
S'il affiche True, passez à l'étape 3
Si False, passez à l'étape 2

2°)Dans une console Powershell faites:
new-item -path $profile -type file -force
3°)Editez le fichier
%userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

Vous pouvez creer vos fonction dans ce fichier
function touch {New-Item -ItemType File -Name ($args[0])}
function sayH {write-host "Hello World";write-host "Hello Everybody"}
etc....
FERMEZ la console Powershell et relancez la.
Vous pourrez appeler directement touch toto.txt (pour creer un fichier toto.txt) ou sayH pour lire Hello World Hello Everybody

Très pratique pour arriver directement à son répertoire de travail et lancer un script
function auboulot{c:; cd\; cd temp; cd travail; .\mon_script.ps1}

lundi 28 octobre 2019

Bat: Envoyer un message (le nouveau netsend)





Envoyer un message à un collègue

Si vous vous souvenez de Netsend qui était désactivé depuis windows 7.
Sachez qu'il existe un autre outil qui va encore plus loin.

Déjà sachez qui est connecté sur une machine distante:


query session /server:nom_pc

Puis envoyez le message comme suit:

msg nom_utilisateur /server:nom_pc /V /w "Hello !"

/v = verbose
/w = information sur la réponse (clic sur ok ou ferme la fenêtre)

Bat: Query Session + LogOff




Vous voulez savoir qui est connecté sur un pc et le Kicker si besoin :
En invite de commande ou Powershell
Query session /server:nom_du_pc
récupérer le numéro de l'ID

logoff /server:nom_du_pc

jeudi 17 octobre 2019

API: TinyURL


Voici une API pour transformer une URL en URL reduite avec le service TinyURL:

http://tinyurl.com/api-create.php?url=www.perdu.com
donne un resultat du type:
http://tinyurl.com/phy6

En PowerShell
$url = Read-Host "Enter the Url"
Invoke-RestMethod -Uri "http://tinyurl.com/api-create.php?url=$url" | clip

lundi 30 septembre 2019

Lister les mots de passe Wifi



Voici un petit script pour lister les mots de passe Wifi sous windows :

$list=@()
$listSSID=(netsh wlan show profile * key=clear) | find "Nom du SSID"
$listSSID=$listSSID.Substring(30).replace('"','')

foreach ($SSID in $listSSID) {
    #write-host $SSID
    $pass=(netsh wlan show profile $SSID key=clear | find 'Contenu de la cl')

    if ($pass -match 'Contenu de la cl')
        {
        $pass=$pass.Substring(35)
        #write-host $pass
        #write-host "2--------------"
        $list+=[PSCustomObject]@{SSID = $SSID;PWD=$pass}
       
    }
}
$list | out-gridview -PassThru

jeudi 14 mars 2019

PowerShell GUI et EXE






Vous avez un script Powershell, mais c'est compliqué à utiliser ou il est franchement moche ?

1°)
Il vous faut un interface Graphique ?
Rien de plus simple avec le site POSHGUI: https://poshgui.com/Editor

2°)
Mais j'ai pas d'îcone:
pas de panic, un petit site pour convertir une image en icone:
https://icoconvert.com/

3°)
Et pour changer l'icone en haut de l'interface par un truc plus sympa ?
$Icon = New-Object system.drawing.icon (".\favicon.ico")
$Form.Icon = $Icon 
ou

ajouter une image converti en texte grâce à 
https://websemantics.uk/tools/image-to-data-uri-converter/
Selectionnez Data-URI
Vous obtenez:
Your data-URIs:
// favicon
data:image/x-icon;base64,AAABAAQAQEA...
 Ajoutez dans votre code PowerShell

$iconBase64      = 'AAABAAQAQEAAAAEAIAAoQA....'
$iconBytes       = [Convert]::FromBase64String($iconBase64)
$stream          = New-Object IO.MemoryStream($iconBytes, 0, $iconBytes.Length)
$stream.Write($iconBytes, 0, $iconBytes.Length);
$iconImage       = [System.Drawing.Image]::FromStream($stream, $true)
$Form.Icon       = [System.Drawing.Icon]::FromHandle((New-Object System.Drawing.Bitmap -Argument $stream).GetHIcon())

4°)
Super, une interface graphique, mais c'est toujours aussi laborieux de lancer le script
Pas de problème, il suffit de le convertir EXE
https://gallery.technet.microsoft.com/PS2EXE-Convert-PowerShell-9e4e07f1
Il s'utilise ainsi depuis une console PowerShell:
powershell.exe -command .\ps2exe.ps1 script_a_convertir.ps1 exe_converti.exe -noConsole -iconfile favicon.ico 

Help:
http://vps297246.ovh.net/powershell-transformer-un-script-powershell-en-executable/

jeudi 7 mars 2019

SCCM: forcer la MAJ du centre Logiciel

Votre centre logiciel ne se met pas à jour ?


Allez dans le panneau de configuration, Configuration manager (sous système)
Onglet Action puis selectionnez les actions suivantes:
 
-Récupération de stratégie Ordinateur et Cycle d'évaluation
-Cycle d'inventaire Logiciel
-Cycle d'évaluation du déploiement de l'application
-Dans le centre logiciel faites F5

Source:
https://it.byu.edu/byu/sc_help.do?sysparm_document_key=kb_knowledge,433f66cf4fcc8200aa42d49f0310c79c


  1. Click on Machine Policy Retrieval & Evaluation Cycle and click on "Run Now."
  2. Click on Software Inventory Cycle and click on the  Run Now button.
  3. Click on Application Deployment Evaluation Cycle and click on "Run Now."
  4. The software in Software Center should update shortly.  Pressing on F5 on the keyboard while in the Software Center window will refresh it.
En PowerShell pour la Machine Policy

$sms_client = New-Object -COM 'CPApplet.CPAppletMgr'
$sms_client | gm   
$actions = $sms_client.GetClientActions()
$actions | select Name
$machine_policy = $actions | ?{$_.Name -like "*Machine Policy"}
$machine_policy.PerformAction()

    lundi 28 janvier 2019

    PowerShell et PC distant






    Il faut être Administrateur de la machine distante !


    c: 
    start powershell -credential ""
    ou 
    start powershell -credential "domain\username" 



    Avoir les process en cours sur un PC Distant
    get-process -computername NOM_PC

    Killer un Process avec son Nom sur un PC Distant
    (Get-WmiObject Win32_Process -ComputerName NOM_PC | ?{ $_.ProcessName -match "NOM_PROCESS" }).Terminate()

    Killer un Process avec son ID sur un PC DISTANT
    (Get-WmiObject Win32_Process -ComputerName NOM_PC | where{$_.ProcessId -eq "4772" }).Terminate()

    Changer le type de demarrage d'un service en Auto sur un PC DISTANT
    Set-Service -name remoteregistry -ComputerName NOM_PC -startuptype "auto"

    Démarrer un service sur un PC Distant
    (Get-Service -ComputerName NOM_PC -Name "RemoteRegistry").Start()

    lundi 11 juin 2018

    Attaquer un PC à distance, quel service lancer



    Souvent, je n'arrive pas à exécuter un script sur une machine distante, voici les manipulations que je dois faire :

    Lancer les services suivants:
    Net start <service>

    Nom_service:Nom francais/Nom Anglais
    RpcSs : Appel de procédure distante /Remote Procedure Call (RPC)
    SessionEnv : Configuration des service bureau à distance /Remote Desktop Configuration
    WinRM : gestion à distance de windows / Windows Remote Management
    RpcLocator : localisateur d'appels de procédure distante /Remote Procedure Call (RPC) Locator
    seclogon : ouverture de session secondaire /Secondary Login
    RemoteRegistry : registre à distance / Remote Registry

    DcomLaunch :Lanceur de processus serveur DCOM / Server Process Launcher Service DCOM

    Si le service n'est pas démarré:
    sc \\<nom_du_pc> start <service> start=auto


    Voir l'état d'un service en PowerShell
    en local
    get-service <service>

    a distance:(avec droits du domaine)
    get-service <service> -ComputerName <nom_du_pc>


    Activer le enable-psremoting -force (Pour WinRM)
    Ports utilisés: HTTP : 5985 / HTTPS : 5986

    Enter-PSSession -ComputerName CLI01.it-connect.fr

    Enable-PSRemoting

    Exit-PSSession

    Source:
    https://technet.microsoft.com/fr-FR/library/dd819498.aspx
    https://www.it-connect.fr/powershell-remoting-avec-winrm/
    GPO: https://www.dtonias.com/enable-powershell-remoting-group-policy/


    En VBS et WMI, démarrer un service:
    $S = Get-WmiObject -Computer $Server -Class win32_service -filter "name='$ServiceName'"
    $S.StopService()
    $S.StartService()
    ou
    Get-WmiObject -Namespace "root\cimv2" -Class Win32_Process -Impersonation 3 -ComputerName

    En PowerShell, démarrer un service:
    Invoke-WMIMethod -Name StopService -Computer $Server -Class win32_service -filter "name='$ServiceName'" 
    
    Invoke-WMIMethod -Name StartService -Computer $Server -Class win32_service -filter "name='$ServiceName'" 
    ou (changer le type de démarrage en auto (de WINRM)) sur le PC $computer.text
    Set-Service -name WinRM -ComputerName $computer.Text -startuptype "auto"
    (démarrer le service WINRM)
    (Get-Service -ComputerName $computer.Text -Name "WinRM").Start()

    WINRM:
    winrm quickconfig
    get-wmiobject CIM_Memory -computername

    Configuration Parfeu:
    netsh firewall set service RemoteAdmin enable.

    netsh advfirewall firewall set rule group="Windows Management Instrumentation (WMI)" new enable=yes


    DCOM:
    Regedit:
    HKLM\Software\Microsoft\OLE, Value: EnableDCOM

    1. Démarrer -> Exécuter -> dcomcnfg
    2. Développez Services de composants -> Ordinateur et sélectionnez propriétés dans le menu contextuel
    3. Dans l'onglet Propriétés par défaut sélectionnez "Activer les services Internet COM sur cet ordinateur"
    4. Redémarrez votre ordinateur.

    PowerShell et Script qui ne se lance pas


    Suite à mon changement de machine, mes scripts ne fonctionnent plus
    Ok, je connais la chanson, on change la ExecutionPolicy de restricted à unrestricted ou remotesigned.

    Unrestricted = impossible
    RemoteSigned = ne fonctionne plus....

    Le script est en local, pourquoi il ne fonctionne pas.
    Il faut aller dans les propriétés du fichier (script) et "débloquer"

        Pour exécuter un script non signé
    
            1. Enregistrez le fichier de script sur votre ordinateur. 
            2. Cliquez sur Démarrer, puis sur Poste de travail et localisez 
               le fichier de script enregistré. 
            3. Cliquez avec le bouton droit sur le fichier de script, 
               puis cliquez sur Propriétés. 
            4. Cliquez sur Débloquer.

    Sources: http://raphaello.univ-fcomte.fr/W2K8/06-Administration/19-Powershell/Res.txt

    mercredi 6 juin 2018

    Powershell quel logiciels installés sur un PC distant





    Pour connaître la liste des logiciels installés sur un poste distant, voici une petite ligne de commande:

    Get-WmiObject -Class Win32_Product -ComputerName PC_de_Bernard | Select-Object -Property Name

    jeudi 17 mai 2018

    VBS: rendre vos utilisateurs autonomes (Vider le gestionnaire d'identification ou Coffre Fort)


    Comme vu sur l'article suivant : Migration de poste: mots de passe enregistrés il est possible d'exporter ses identifiants d'un poste à l'autre grâce aux outils Microsoft Credential Manager ou en ligne de commande avec CMDKEY.

    Il est donc possible d'automatiser quelques tâches en voici un exemple :

    Dim shell,command
    command = "powershell.exe -nologo -command (cmdkey /list | ForEach-Object{if($_ -like '*Cible*'){cmdkey /del:($_ -replace ' ','' -replace 'Cible:','')}})"

    Set shell = CreateObject("WScript.Shell")
    shell.Run command,0
    msgbox("Nettoyage du Gestionnaire d'identification effectué")

    La solution est certes alambiqué, un VBS qui lance un PowerShell qui lance un exécutable, mais elle a le mérite d'exister, et d'être transparent pour l'utilisateur 

    mardi 15 mai 2018

    PowerShell Import Module ne fonctionne pas





    Si en PowerShell vous souhaitez utiliser la fonction Import-Module mais que celle-ci de fonctionne pas.
    "n'est pas reconnu"
    Installez la dernière version du Windows Management Framework 5.1
    et redémarrez


    Pour être sûr: dans une fenêtre PowerShell, lancez la commande "HOST"
    Si la version est 4, ce n'est pas bon
    Si la version est 5.1, c'est bon
    =>Testez la commande import-module


    La commande "import-module" est disponible :)


    jeudi 26 avril 2018

    VBS : Ou Suis je ?

    Les scripts "Ou Suis je" sont très simple, ils affichent l'emplacement du script :
    Ici un exemple en VBS:

    Msgbox (Left(WScript.ScriptFullName, InStrRev(WScript.ScriptFullName,"\")))

    En Batch:

    echo Le dossier courant est : %~dp0

    En PowerShell



    $CurrentDir = [System.IO.Path]::GetDirectoryName($myInvocation.MyCommand.Definition)


    mardi 13 février 2018

    Migration de poste: mots de passe enregistrés

    rundll32.exe keymgr.dll, KRShowKeyMgr

    Exportez et réimportez depuis l'outil

    Sinon:
    control /name Microsoft.CredentialManager
    control keymgr.dll

    en ligne de commande:
    cmdkey.exe

    [Ajout au 16/05/18]
    Ci-dessous un script PowerShell pour vider les informations (ne fonctionne pas pour les cible ayant des espaces, ou les OC1)


    cmdkey /list | ForEach-Object{if($_ -like "*Cible*"){cmdkey /del:($_ -replace " ","" -replace "Cible:","")}}

    ou

    cmdkey /list | where {$_ -match 'LegacyGeneric'} | foreach { cmdkey /delete "$($_.split()[-1])" }

    Et en Batch:

    for /F "tokens=1,* delims=: " %G in ('cmdkey /list ^|findstr Cible') do cmdkey /delete %H

    Retour sur le powershell : les bases du scripting






    Voici un prompt rappel sur l'utilisation de PowerShell en scripting :




    • Pour savoir si la stratégie autorise le lancement de script powershell:
    Dans une console Powershell :Get-executionPolicy

    • Pour changer la stratégie (en console powershell avec droits admin)
    Set-executionPolicy Unrestricted

    • Pour voir les messages d’erreur car trop rapide pour lire et analyser
    En console Powershell : powershell -noexit d:\script\foo.ps1

    jeudi 4 janvier 2018

    Utiliser une fonction PowerShell (dans la fenêtre en cours)


    On m'a donné une fonction powershell mais impossible de l'utiliser, comment faire ?

    Pour que la fonction soit utilisable, il faut la définir comme disponible.

    Votre code fonction, doit être enregistré dans un fichier *.PS1
    ensuite, en administrateur (pour être sûr), lancez une invite de commande Powershell
    executer :
    . .\chemin\mafonction.ps1
    Notez bien le


    dans la fonction devrait être disponible dans la fênetre en cours, mais ne le sera plus si la fenêtre se ferme.

    mardi 18 décembre 2012

    Powershell - Form





    [void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") 

    $form = new-object Windows.Forms.form   
    $form.Size = new-object System.Drawing.Size @(480,400)   
    $form.text = "essai graphique 12/04/2007"

    $boutton = new-object System.Windows.Forms.Button
    $boutton.Text = 'Valider'
    $boutton.Location = new-object System.Drawing.Size(300,155)  
    $boutton.size = new-object System.Drawing.Size(120,30)
    $boutton.add_Click({$nom=$listbox.get_selecteditem();$label2.text = "Reponse : " + $nom})

    $label = New-Object System.Windows.Forms.Label
    $label.text = "Qui est le meilleur en powershell ?"
    $label.set_ForeColor("Green")
    $label.Location = new-object System.Drawing.Size(55,30)  

    $label.size = new-object System.Drawing.Size(200,20)
    $label2 = New-Object System.Windows.Forms.Label
    $label2.Location = new-object System.Drawing.Size(310,220)  
    $label2.size = new-object System.Drawing.Size(180,20)

    $listbox = new-object System.Windows.Forms.ListBox
    [void]$listbox.Items.Add("Arnaud")
    [void]$listbox.Items.Add("Robin")
    [void]$listbox.Items.Add("Un autre")
    [void]$listbox.Items.Add("Un autre2")
    [void]$listbox.Items.Add("Un autre2")
    [void]$listbox.Items.Add("Un autre2")
    $listbox.Location = new-object System.Drawing.Size(50,75)  
    $listbox.size = new-object System.Drawing.Size(200,200)

    $form.Controls.Add($boutton)
    $form.Controls.Add($listbox)
    $form.Controls.Add($label)
    $form.Controls.Add($label2)

    $Form.Add_Shown({$form.Activate()})
    [void]$form.showdialog()


    Powershell - astuces



    Voici quelques astuces en vrac pour Powershell :

    Ajouter du texte dans un fichier TXT
    ADD-content -path C:\temp\test.txt -value "Bonjour"

    Lister tout les alias
    get-alias

    trouver une commande d'un alias
    get-alias gal

    trouver un alias d'une commande
    get-alias -definition format-table

    Trouver le DistinguishedName
    Avec import-module activedirectory
    $dn=(Get-ADUser "e-ricmx012").DistinguishedName

    Afficher les partages
    Get-WmiObject Win32_Share

    Passage d'arguments
    echo $args[0]

    PopUp
    $message = "BonJOUR"
    $shell = new-object -com wscript.shell
    $shell.popup("$message toi")

    Prompt
    $UserName = Read-Host "Please enter user name"
    Get-Aduser $Username

    Demarrer service sur machine distante
    Invoke-Command {Start-Service "NSClientpp" -passthru} -ComputerName "srv-windows"

    importer le module active directory
    import-module activedirectory



    #pointer sur l' ad
    cd ad:

    Version Powershell
    $Host.Version
    ou
    $PSVersionTable
    ou
    $PSVersionTable.psversion
    ou + précis
    $PSVersionTable.psversion.Major