[PowerShell] Comparer deux dossiers

Bonjour à tous,

Voici une portion de script dérivant comment comparer le contenu de deux dossiers.
Le but ici est d’identifier :

  • les fichiers en commun
  • les fichiers présents uniquement dans le premier dossier
  • les fichiers présents uniquement dans le second dossier

Notez que dans la présente situtation, la comparaison se fait au niveau du nom du fichier (-Property Name), mais vous pouvez lancer la comparaison sur un ou plusieurs autres critères comme par exemple le nom et la date de modification.

1
2
3
4
5
6
7
$FolderContent1 = @(Get-ChildItem -Path "<FolderPath1>") | where {!$_.PSIsContainer}
$FolderContent2 = @(Get-ChildItem -Path "<FolderPath2>") | where {!$_.PSIsContainer}
$ComparisonResult = Compare-Object -ReferenceObject $FolderContent1 -DifferenceObject $FolderContent2 -Property Name -IncludeEqual 
$EqualFiles = $ComparisonResult | Where-Object{$_.SideIndicator -eq "=="}
$FilesOnlyInTheFirstFolder =  $ComparisonResult | Where-Object{$_.SideIndicator -eq "<="}
$FilesOnlyInTheSecondFolder = $ComparisonResult | Where-Object{$_.SideIndicator -eq "<="}

et le résultat si je ne souhaite afficher que les fichiers présents dans les deux dossiers :


Enjoy 😉

[PowerShell] Tester si un périphérique est connecté

Bonjour à tous,

Voici une fonction qui vous permettra de tester si un périphérique est connecté sur un poste de travail.
Cette fonction retourne les caractéristiques du périphérique si il est trouvé, sinon elle ne renvoie rien.
Le critère de recherche est un ID plug’n’play ou une liste d’IDs plug’n’play compatibles avec ce périphérique.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
function Search-Device
{
    Param
    (
        [Parameter(Mandatory=$true,ValueFromPipeline=$false,Position=0)][String[]]$PnpIDs
    )
 
    $devices = $device = $FoundDevice = $null
 
    # On dresse la liste des pépriphériques connectés 
    $devices = Get-WmiObject -Class Win32_PnpEntity | Sort-Object -Property Caption
 
    # On cherche dans cette liste si un périphérique contient l'ID plug'n'play recherché
    foreach ($device in $devices)
    {
        # On construit la liste des IDs plug'n'play compatibles
        $CompatibleIDs = $null
        if ($device.HardwareID.Count -gt 0)
        {
            $CompatibleIDs = $device.HardwareID
        }
        if ($device.CompatibleID.Count -gt 0)
        {
            $CompatibleIDs += $device.CompatibleID
        }
 
        # On cherche l'ID plug'n'play parmi la liste 
        if ($CompatibleIDs -ne $null)
        {
            foreach ($PnpID in $PnpIDs)
            {
                if ($CompatibleIDs.Contains($PnpID) -eq $true)
                {
                    $FoundDevice = $device
                    break
                }
            }
        }
    }
 
    if ($FoundDevice -ne $null)
    {
        Write-host "Périphérique trouvé" -ForegroundColor Green
        Write-Output $FoundDevice
    }
    else 
    {
        Write-Host "Périphérique non trouvé" -ForegroundColor Yellow
        Write-Output $null
    }
}

Exemples d’utilisation :

1
$Device = Search-Device -PnpIDs @('PCI\VEN_8086&DEV_0166&REV_09','PCI\VEN_8086&CC_030000')

Enjoy 😉

[PowerShell] Créer un compte administrateur local

Vous n’êtes pas sans savoir qu’une des meilleures « best practices » concernant la sécurisation des postes de travail réside dans deux critères :

  • Désactiver le compte « administrateur » local
  • Eviter de créer un compte local sur tous les postes de travail, avec le même mot de passe

Par défaut, le compte « administrateur » est désactivé sous Windows 7.

Il ne nous reste donc plus qu’à créer un nouveau compte local respectant les bonnes pratiques.

Pour se faire, j’ai écrit un script PowerShell qui créé un nouveau compte local, l’ajoute au groupe « Administrateurs » et configure son mot de passe.

Ce script peut être intégré à une séquence de tâches. Pour davantage de détails sur l’exécution d’un script powershell dans une séquence de tâches, c’est par ici.

Lire la suite

PowerShell – Copier le contenu d’un package sur le poste de travail

Vous avez certainement rencontré le besoin de copier le contenu d’un package SCCM sans pour autant avoir à exécuter un programme. Aucune tâche native dans un programme ou une séquence de tâches ne vous permet de réaliser cette action.

C’est la raison pour laquelle je vous propose ce petit script qui vous donnera une base de travail.

Lire la suite