PowerShell - Module pour rajouter le service WDS

Windows Deployment Services ou WDS est une technologie de Microsoft qui va vous permettre  d'installer un système d'exploitation Windows via le réseau (PXE). Ils permettent d'installer à distance Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10, Windows Server 2008, Windows Server 2012 et Windows Server 2016 mais il est également possible de déployer d'autres systèmes d'exploitation Windows, en effet, le processus d'installation se fait à l'aide d'une image de type Windows Imaging Format (WIM) contrairement à RIS qui avait pour procédé l'automatisation de la phase d'installation du système d'exploitation. Il est ainsi possible d'installer des systèmes d'exploitation avec des applications préinstallées. WDS est un rôle optionnel qui est inclus dans toutes les éditions serveur de Windows depuis Windows Server 2008.

Pour utiliser ce script PowerShell, il faudra rajouter dans le paramètre le chemin du dossier à créer. Depuis Windows PowerShell, il faudra executer le script avec le chemin.
Exemple:
Installer le service Windows Deployment sur votre serveur et utiliser le repertoire C:\WDS.
PS-WDSUTIL.ps1 -RemInst C:\WDS
Retirer le service Windows Deployment sur votre serveur.
PS-WDSUTIL.ps1 -Remove

Voici le code au complet, si vous avez des problèmes merci de revenir vers moi, pour la correction.

<#
.SYNOPSIS
    Add or remove Windows Deployment Services for Windows Server.
.DESCRIPTION
    Add or remove Windows Deployment Services for Windows Server.
    PS-WDSUTIL take string for define the folder use for initialize server.
.PARAMETER Name
    
.EXAMPLE

PS-WDSUTIL.ps1 -RemInst C:\WDS
Initialize Windows Deployment Service on server and use C:\WDS folder

.EXAMPLE

PS-WDSUTIL.ps1 -Remove
Uninitialize Windows Deployment Service on server

.NOTES
Script Version 1.0
Tested on:  Windows Server 2016
            Windows Server 2016   
            
.LINK
https://tdelacour.wordpress.com/
#>

# Script Parameter

    param(
    [Parameter(Mandatory = $True)]
    [ValidateNotNullOrEmpty()]
    [string]$RemInst,
    [Parameter(Mandatory = $False)]
    [switch]$Remove
    )

#---------------------------------------------------

#region ProductType
# Get ProductType to define the type of the operating system
Try
{
    # Get information via Cim
    $OSQUERY = Get-CimInstance -Namespace ROOT/cimv2 -ClassName Win32_OperatingSystem
}
Catch
{
    # if Get-CimInstance not work, get information via Wmi
    $OSQUERY = Get-WmiObject  -Namespace ROOT/cimv2 -Class Win32_OperatingSystem
}

# Detection if the script uses on a server
if ($OSQUERY.ProductType -ne "3"){
Write-Output "This script, it's only for a Windows Server"
Write-Output "This script don't be used on Domain Controler"
Break
}

#endregion

# Check if Windows Deployment Service already exists

$WDSService = get-service -Name WDSServer

#If the Windows Deployment service is on its way, we will ask you the question if we withdraw the service

If(($($WDSService.Status) -eq $null -or $($WDSService.Status) -eq "Stopped") -eq $false){
    Write-Output "Would do you remove WDS Service ? (Default is No)"
    $ReadHost = Read-Host " ( Y / N ) "
    Switch ( $ReadHost ) {
    Y {Write-Output "Yes, Remove WDS Service"; $RemoveWDS=$true}
    N {Write-Output "No, Keep WDS Service"; $RemoveWDS=$false}
    Default {Write-Output "Default, Keep WDS Service"; $RemoveWDS=$false}
    }
    if($RemoveWDS -eq $true){
    wdsutil /verbose /Uninitialize-server
    }
    else
    {
    Write-output "Sorry, this script do nothing"
    Break
    }
}

#endregion
 
# Remove the folder to use by the script, if it already exists, with prompt

If((Test-Path $RemInst) -eq $true)
{
Write-Error "This folder already exist"
Remove-Item -Path $RemInst -Force -Recurse -Confirm
If((Test-Path $RemInst) -eq $true)
    {
        Write-Error "The folder is always present"
        Break
    }
}

#endregion

#region WindowsFeature

# Install Windows Feature wds-deployment
Try {
$ADDWDS = Install-WindowsFeature wds-deployment -IncludeManagementTools
$ADDWDS.ExitCode.value__
}
Catch
{
Write-Error $Error
}

If ($ADDWDS.ExitCode.value__ -eq "1003"){Write-Output "WDS Service is already install - No Change Needed"}

#endregion

#region CreateFolderReminst

# Create Reminst folder
New-Item -Path $RemInst -Force -ItemType directory

#endregion

#region InstallServic

# Detect if you computer is on domain or workgroup via cim or wmi
Try
{
    # Get information via Cim
    # PartOfDomain (boolean Property)
    $PartOfDomain = Get-CimInstance -Namespace ROOT/cimv2 -ClassName Win32_ComputerSystem | Select PartOfDomain | ft -AutoSize -HideTableHeaders
    # WorkGroup (String Property)
    $WorkGroup = Get-CimInstance -Namespace ROOT/cimv2 -ClassName Win32_ComputerSystem | select Workgroup | ft -AutoSize -HideTableHeaders
}
Catch
{
    # if Get-CimInstance not work, get information via Wmi
    # PartOfDomain (boolean Property)
    $PartOfDomain = (Get-WmiObject -Class Win32_ComputerSystem -Namespace ROOT/cimv2) | select PartOfDomain | ft -AutoSize -HideTableHeaders
    # WorkGroup (String Property)
    $WorkGroup = (Get-WmiObject -Class Win32_ComputerSystem -Namespace ROOT/cimv2) | select Workgroup | ft -AutoSize -HideTableHeaders
}

# Run WDSUTIL with the right settings, which depends on whether the server has on domain or not

if (!$PartOfDomain)
{
    Write-Output "Domain"
    WDSUTIL /Verbose /Progress /initialize-server /remInst:$RemInst
}
Else
{
if (!$WorkGroup)
    {
        Write-Output "Error Wmi\Cim filter"
        break
    }
    Else
    {
    Write-Output "Workgroup"
    WDSUTIL /Verbose /Progress /Initialize-Server /REMINST:$RemInst /Standalone
    }
}

#endregion

Commentaires

Posts les plus consultés de ce blog

MRemoteNG - Voir les mots de passe dans l'application

Powershell - Utiliser les requêtes WMI

PowerShell - Utiliser NSIS (Nullsoft Scriptable Install System) pour simplifier l'usage des scripts PS1