Jean-Sébastien DUCHENE Blog's

Actualité, Tips, Articles sur l'ensemble des Technologies Microsoft (Microsoft Intune, ConfigMgr, Microsoft Defender, Microsoft Purview, Microsoft Azure, Windows...)

Depuis System Center 2012 Configuration Manager SP1, Microsoft a introduit un module PowerShell permettant de faire des actions d’administration. Ceci est très pratique pour les administrateurs et peut être utilisé notamment pour faire de l’orchestration. Quand on veut faire de l’orchestration, le but n’est pas d’installer toutes les consoles du monde (SCCM, SCOM) pour pouvoir avoir accès aux cmdlets PowerShell. Pour cela, il est possible d’utiliser Remote PowerShell. On se connecte via WinRM pour exécuter des actions à distance sur une machine dédiée.

Pour cela, vous pouvez utiliser le script suivant :


$script:ErrorActionPreference = "Stop"

Set-StrictMode -Version Latest

 

$SCCMPrimaryServer = "<SERVERNAME>"

$session = $null

[hashtable]$output = @{"error" = $null; "success" = "success"}

 

Write-Verbose "Trying to open session on $SCCMPrimaryServer..."

try

{

#Try To create session

$session = New-PSSession -ComputerName $SCCMPrimaryServer -ConfigurationName Microsoft.PowerShell32;

Write-Verbose "Session opened"

}

catch

{

Write-Verbose "Error : Can't connect to $SCCMPrimaryServer";

$output.success = "error"

$output.error = "Error : Can't connect to $SCCMPrimaryServer";

}

#If The session was created

if($output.success-ne "error" -and $session -ne $null)

{

write-verbose "Invoking scriptblock into the session"

$output = Invoke-Command -Session $session -ArgumentList $SCCMPrimaryServer,$Arg1 -ScriptBlock {

   #Initialize variables

   [String]$SCCMPrimaryServer = $args[0]

   [String]$Arg1 = $args[1] #Used for your Purpose

   [hashtable]$output = @{"success" = "error"; "error" = $null}

 

   Function Connect-SCCM

   {

       If (!(Get-Module ConfigurationManager)) {

           [String]$SCCMInstall = ((Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\ConfigMgr10\Setup').'UI Installation Directory')

           Import-Module ($SCCMInstall +'bin\ConfigurationManager.psd1') -Scope Global

       }        

       Set-Location ((get-psdrive -PSProvider CMSite).Name+":")

   }

      

           # Connect to Primary Site

          

           Try{

               Connect-SCCM

               $output.success = "success"

           }

           Catch {

             $output.success = "error"

             $output.error = "Error connecting SCCM"

           }

          

           If($output.success -ne "error")

           {

               try {

                   # DO the Work HERE

               }

               catch {

                   $output.success = "error"

                   $output.error += $_.Exception.Message

               }

           }

   #Return the output outside of the session

   Return $output

}

Write-verbose "Scriptblock executed, killing session"

#Delete the session

Remove-PSSession $session;

}

else

{

#If session is null then it couldn't be created

Write-Verbose "Error : Can't open session to $SCCMPrimaryServer";

$output.success = "error"

$output.error = "Error : Can't open session to $SCCMPrimaryServer";

}

 

Ceci fonctionnera dans certaines conditions. En effet, le paramétrage du drive PowerShell peut échouer. La ligne suivante est concernée :

Set-Location ((get-psdrive -PSProvider CMSite).Name+":")

 

J’ai trouvé un article sur le blog de l’équipe Microsoft Denmark Premier Field qui m’a permis de débloquer la situation. Pour cela, vous devez :

  • Vous connecter sur la machine cible avec le compte de service utilisé pour exécuter le script en Remote PowerShell
  • Ouvrir la console d’administration puis utiliser la fonction Connect via Windows PowerShell.
  • La fenêtre PowerShell s’ouvre et le certificat n’ayant jamais été approuvé, vous demande de le valider. Vous pouvez alors sélectionner [A] pour Always Run.
  • Ceci fonctionnera mais si vous voulez utiliser une méthode plus propre, vous pouvez sur cette même machine, naviguez dans le répertoire d’installation de la console\AdminUI\Bin.
  • Identifiez le fichier ConfigurationManager.psd1 et ouvrez les propriétés.
  • Sélectionnez le certificat et installez-le sur la machine dans le magasin Trusted Publishers.

Pour voir la procédure complète, vous pouvez lire l’article : Running Configuration Manager 2012 PowerShell scripts as a Service Account or Local System

Facebook Like