Archive

Posts Tagged ‘Script’

SCCM – Comment importer et insérer dans les bonnes collections, de nouvelles machines en même temps ?

octobre 13, 2012 4 commentaires

Bonsoir à tous,

sccm20124

Pour faire suite à mon précédent post, et parce qu’il est toujours long et fastidieux d’importer plusieurs machines inconnues dans ConfigMgr (même s’il est possible de les importer via un fichier Excel, de base), je vous propose ici un script Powershell, qui non seulement vous permettra d’importer autant de machines que nécessaire, mais aussi de les dispatcher dans plusieurs collections de déploiement (scénarios), dans le même temps.

Machine Manual Entry
En effet, nous utilisons tous plusieurs collections, afin de segmenter les scénarios de déploiement. Une fois l’import des machines effectué, il nous faut ensuite les dispatcher dans les bonnes collections (Replace / New Computer / etc.).

image

Le Script
Celui-ci s’appui sur un fichier CSV, modifiable depuis Excel. Cette méthode vous permet d’organiser vos déploiement avec plus de sérénité. Ce fichier CSV est organisé comme suit :

image

Exécution du script

image

Après l’exécution du script, celui-ci a importé 4 nouvelles machines, puis les a dispatché dans les collections … New Computer et … Replace Computer.

image

Bien sûr, tout ceci n’est qu’un exemple…

image

Enjoy !

avatar Michel PICOLLET | EXAKIS Paris
Solution Architect Microsoft [System Center]
mpicollet@event-horizon.fr

Catégories :SCCM Étiquettes : , , , , , , ,

SCCM – Comment faire apparaitre une nouvelle machine (Machine Entry) dans une collection de déploiement à la vitesse de l’éclair ?

octobre 11, 2012 4 commentaires

sccm20124Bonjour à toutes et à tous,

Dans ma recherche d’automatiser, par script Powershell, l’insertion d’une nouvelle machine dans SCCM (Import Computer Information), je parcours et étudie les scripts disponibles et diffusés actuellement sur la toile.

L’importation de nouvelle ressource machine dans SCCM ne pose pas de problème. Beaucoup de scripts de tous poils sont disponibles et adaptables facilement.

En passant, spéciale dédicace à toutes ces personnes pour leur travail et leur partage. Notamment celui de Kaido Järvemets : http://cm12sdk.net/?page_id=10, (Good Job), et bien autres encore …

clip_image001

Pour en revenir à mon cas, mon problème, c’est qu’une fois importée, ma machine met un temps infini pour apparaitre enfin dans ma collection de déploiement OSD. Il faut, au mieux attendre, 10 minutes, avant que celle-ci daigne bien apparaitre enfin, dans la dite collection… 😦

Là encore, une recherche sur internet et hop ! Un script permet aussi de faire cela ! Cool ! Intégration immédiate dans mon script d’importation et test ! Je passe de 10 à 5 minutes… Oui… C’est mieux ! Mais ce n’est pas non plus le Nirvana…

Alors comment passer de 5 minutes à moins d’une second ?
Simple ! Beaucoup de scripts font un Refresh de la collection finale, dans mon cas, ma collection de déploiement OSD. En fait, ce n’est pas celle-ci qu’il faut rafraichir, mais la collection : All Systems !! Et oui, car désormais dans SCCM 2012, on passe par la collection ”Devices”, pour entrer une nouvelle machine, puis celle-ci va dans All Systems, et enfin dans la collection finale que l’on veut utiliser. Tant que All Systems, n’est pas rafraichie, rien n’arrivera dans votre collection finale de déploiement !

Démonstration
Observez-bien l’horloge de la machine

Cas 1 : Importation de la machine (WKSNAMENTRY01) dans la collection finale, puis  rafraichissement de celle-ci
Modification de la fin de mon script en conséquence

clip_image003

5h50 – Création de la machine, puis rafraichissement :

clip_image005

5h52 – Malgré la présence de la machine dans la collection All Systems…

clip_image007

… Toujours rien dans ma collection finale (ou seulement après 4 minutes) 5h54 😦

clip_image009

Temps de réaction : 4-5 minutes (5h54)

Colleval.log

clip_image011

Cas 2 : Importation de la machine (WKSNAMENTRY03) dans la même collection, mais cette fois rafraichissement de la collection « All Systems »
Modification de la fin de mon script en conséquence

clip_image013

6h06 – Création de la machine, puis rafraichissement :

clip_image015

6h07 – Elle apparait déjà dans ma collection finale… 🙂

clip_image017

Temps de réaction : 30 secondes, c’est le temps qu’il m’a fallu pour faire les screenshots…

Temps réel de rafraichissement : 1 seconde ! (6h06)

Colleval.log

clip_image019

Enjoy !

avatar Michel PICOLLET | EXAKIS Paris
Solution Architect Microsoft [System Center]
mpicollet@event-horizon.fr

Catégories :SCCM Étiquettes : , , , , , , ,

SCCM – Nouvelle version (v14.0) du script Hydration sous Powershell

sccm2012Bonjour à tous,

Nouvelle version (v14.0) du script Hydration sous Powershell v2.0

Fichier : i-hydration-SC2012-v14.ps1

Dans cette version 14.0 :

Correction de bogues mineurs;
Possibilité d’installer WSUS avec un serveur SQL distant;
Ajout du groupe GG-SCCM-SERVERS (par défaut) dans les groupes locaux SCCM;
Ajoute la possibilité d’installer MDT 2012 et créé le Deployment Share (New Switch).

64pxwindows-powershell-icon_thumb3 Téléchargement du script

Dans la version 12.0 précédente :

Correction de bogues mineurs
Intégration de vos remarques
Evolution de présentation d’exécution
Possibilité d’installer soit un CAS, soit un Site Primaire enfant d’un CAS, soit un site CAS / Primaire par système de choix

REMARQUE 1 : L’utilisation d’un fichier CSV est une volonté, afin de le manipuler avec plus de facilité (Lisibilité, modification, etc.).
REMARQUE 2 : Tous les répertoires d’installations cibles des solutions sont automatiquement créés. Inutile des créer à l’avance manuellement.

Caractéristiques du script Powershell : i-hydration-SC2012-v14.ps1 –help

i-hydration-SC2012-v1x.ps1 -[Switch] :

[Switch] -HydrationReps –> To prepare the Hydration folders
[Switch] -DomainServices –> To install and configure AD Service
[Switch] -ADConfigmgr –> To prepare AD environment for SC2012
[Switch] -Rolesr2 –> To Install Windows 2008 R2 server roles for SC2012
[Switch] -ConfigSQL –> To Configure Microsoft SQL Solution for SC2012
[Switch] -SQLSrvr2 –> To Install Microsoft SQL Server 2008 R2 for SC2012
[Switch] -WSUS –> To Install Microsoft WSUS 3.0 SP2 for SC2012
[Switch] -ConfigMgr12 –> To Install CAS/Primary SCCM Server SC2012
[Switch] -MDT12 –> MDT Installation Solution (with Deployment Share) new 
[Switch] -Help –> Help panel …
[Switch] -ReadCSV –> To read CSV i-answers.csv file

NOTE : Tous les fichiers de réponses (Rôles serveur, Active directory, SQL, SCCM, etc.) sont générés à la volée par le script Powershell.

Commande : i-hydration-SC2012-v14.ps1 -Help

Screenshots

image

Lecture du fichier de réponse CSV

Commande : i-hydration-SC2012-v14.ps1 -ReadCSV

image_thumb3

Préparation de l’active Directory pour SCCM 2012 RTM (Sans Extension du schéma)

A faire sur le DC

Commande : .\i-hydration-SC2012-v14.ps1 -ADConfigmgr

Création du container AD : System Management
Création du groupe spécifié dans le fichier de réponse CSV
Positionnement des droits ACE/ACL du le container System Management

Action manuelle : Encore dans cette version du script, vous devez ajouter le compte machine du serveur SCCM futur dans le groupe spécifié manuellement.

Screenshots

Commande

Résultat attendu

clip_image003_thumb2

clip_image004_thumb1

Préparation du futur serveur SCCM 2012 RTM

A faire sur le futur serveur SCCM

Pour l’exemple d’organisation de mes disques et partition :

clip_image006_thumb4

Création de l’organisation des répertoires HYDRATION

A faire sur le futur serveur SCCM

Commande : .\i-hydration-SC2012-v14.ps1 –HydrationReps

Screenshots

Commande

Résultat attendu

clip_image007_thumb2

clip_image008_thumb1

Action manuelle : Copier manuellement les sources dans leurs répertoires respectifs sur le futur serveur SCCM

NOTE : Cette organisation n’est pas obligatoire. Vous pouvez utiliser un chemin UNC par exemple, etc. Il suffit simplement de mettre à jour le fichier de réponse CSV en fonction !

Installation des rôles pour SCCM du futur serveur

A faire sur le futur serveur SCCM

Commande : .\i-hydration-SC2012-v14.ps1 -Rolesr2

Screenshot

Commande

Résultat attendu

clip_image009_thumb

clip_image010_thumb

IMPORTANT : Si vous n’avez pas copier manuellement les sources et notamment .Net Framework 4.0 dans le répertoire Updates, il ne sera pas installé lors cette phase-là. Dans le cas contraire :

clip_image011_thumb2

Installation de Microsoft SQL 2008 R2 avec le Service Pack 1 et le Cumulatif Update 6

A faire sur le serveur SQL

Commande : .\i-hydration-SC2012-v14.ps1 -SQLSrvr2

Prérequis important : Avoir copié les sources suivantes à l’endroit voulu et avoir modifié le fichier de réponse en fonction :

Sources SQL 2008 R2
Sources Service Pack 1
Sources Cumulatif Updates 6

Si vous voulez utiliser un serveur dédié pour SQL, les prérequis serveurs pour SQL doivent y être installés.

image_thumb1

NOTE : A ce stade, SQL n’est pas entièrement configuré

Configuration de Microsoft SQL

A faire sur le serveur SQL

Commande : .\i-hydration-SC2012-v14.ps1 –ConfigSQL

clip_image013_thumb2

A ce stade, SCCM peut désormais être installé, tous les prérequis sont présents !

Installation de Microsoft SC Configuration Manager 2012 RTM

A faire sur le serveur SCCM

Commande : .\i-hydration-SC2012-v14.ps1 -ConfigMgr

Prérequis important : Avoir copié les sources suivantes à l’endroit voulu et avoir modifié le fichier de réponse en fonction :

Sources SCCM 2012 RTM
Updates SCCM2012 (Répertoire Updates)

clip_image014_thumb2

Choisir le type de site que vous voulez installer, le fichier de réponse INI sera construit à volée en fonction de votre choix (Par défaut CAS)

Installation de Microsoft Deployment Toolkit 2012 RTM new

A faire sur le serveur SCCM/MDT

Commande : .\i-hydration-SC2012-v14.ps1 –MDT12

Prérequis important : Avoir copié les sources suivantes à l’endroit voulu et avoir modifié le fichier de réponse en fonction :

Sources de MDT 2012 RTM

image

-> Montage du Deployment Share de MDT 2012 RTM pris en compte dans Hydration v14:

image

NOTE : L’intégration de MDT 2012 dans SCCM 2012 reste manuelle dans cette version du script

Installation de Microsoft WSUS 3.0 SP2

A faire sur le serveur SCCM qui sera Software Update Point

Commande : .\i-hydration-SC2012-v14.ps1 -wsus

Prérequis important : Avoir copié les sources suivantes à l’endroit voulu et avoir modifié le fichier de réponse en fonction :

Sources WSUS 3.0 SP2
Report Viewer 2010 (ou version 2008 minimum)
Avoir installé SQL Server en local ou sur un serveur dédié

clip_image016_thumb2

Installation d’un domain controlleur 2008 R2

A faire sur le serveur SCCM qui sera DC

Commande : .\i-hydration-SC2012-v14.ps1 – DomainServices

Le script est aussi capable d’installer un contrôleur de domaine (New Forest/New domain. Celui-ci générer, comme pour le reste, le fichier de réponse d’installation de l’AD. De même le script installe les services et le DNS en où ils ne seraient pas installés

NOTE : Une petite erreur de variable s’est glissée dans le script, ligne 1260. Modifier la ligne comme suit : if ($CASServerConfigMgr -eq "")

Enjoy !

Michel PICOLLET | EXAKIS Paris
Solution Architect Microsoft [System Center]
mpicollet@event-horizon.fr

SCCM – Script Powershell v2 d’installations automatisées Microsoft System Center 2012 ConfigMgr

sccm2012

Bonjour à tous,

Après quelques mois d’absence pour raison personnelle, me revoilà avec un script Powershell Hydration qui permet d’installer toute la solution System Center Configuration Manager 2012 RTM. Celui-ci fonctionne avec des -Switchs (arguments attendus). Chaque Switch correspond à un type d’installation (SQL, SCCM, etc.). Switch que vous pouvez chainer…

Dans cette version :
– Installation d’un Contrôleur de domaine 2008 R2, incluant le rôle DNS
– Préparation de l’active directory
(Volontairement sans l’extension du schéma)
– Installation et configuration des rôles serveur pour SCCM 2012 (Windows 2008 R2)
– Installation de Microsoft SQL 2008 R2 avec le SP1 et le CU6
– Configuration du serveur SQL (Firewall, Ports Réseau, tailles des bases etc.)
– Installation de Microsoft WSUS 3.0 SP2 avec installation et configuration d’un site IIS
– Installation de Microsoft SCCM 2012 RTM
(CAS/Primary).
– P
ositionnement du flag NO_SMS_ON_DRIVE.SMS

Nouveautés
Dans cette version, beaucoup plus de contrôles, de fichiers de Logs. Il est aussi possible de rejouer les installations de SQL en cas d’échec. Le script se charge de savoir où vous en êtes pour reprendre. Enfin, dans version, toujours pour SQL, il est possible de jouer une installation à partir de sources “Splitstreamées”. Par contre, dans cette version, la construction d’une telle source reste à votre charge (modification du fichier, INI SQL, décompression des sources SPx et CUx, etc.).

Screenshot .\V_PSHydration-SCE012-v10.2.ps1 -help

Hydration_v2

NOTE : Tous les fichiers de réponses (Rôles serveur, Active directory, SQL, SCCM, etc.) sont générés à la volée par le script Powershell. Par ailleurs, le script PSH utilise un fichier de réponse CSV pour fonctionner.

Bien sûr, le script peut être fortement amélioré… Je vous fais confiance pour vous l’approprier, afin d’apporter des améliorations ou/et de le corriger … Si vous pouviez juste faire partager vos suggestions, ce serait vraiment super ! Je rappelle que le but de ma démarche est avant tout, faciliter les installations des solutions et surtout de gagner du temps sur nos maquettages, par exemple…

64pxwindows-powershell-icon_thumb

 Téléchargement du script

Enjoy !

Michel PICOLLET | EXAKIS Paris
Solution Architect Microsoft [System Center]
mpicollet@event-horizon.fr

SCCM – Scripting : Comment écrire audit SCCM dans document Word de 140 pages en 5 minutes ?

février 27, 2012 4 commentaires

logo-sccm-20072_thumb2_thumb

Bonjour à tous,

Je vous indique ici d’une p’tite trouvaille qui permet à la fois d’auditer un site SCCM complet et d’en faire un document Word de 140 pages…

Prérequis : Bien sûr, avoir Microsoft Word

Ensuite, passer en ligne de commande et taper la commande suivante :
# Cscript.exe sydi-SCCM.vbs

Entrer le nom du serveur de site SCCM :

image

Ensuite, cliquer sur OK

Le but du script n’est pas réellement de faire un audit, mais de scruter tous les paramètres du site SCCM pour en générer un document Word. Votre interprétation (votre valeur ajoutée) vient ensuite lorsque vous allez donner votre opinion et donc faire l’audit. La matière première étant déjà là !

Résultat du script :

image

Lien du script : http://www.enhansoft.com/downloads/vbs/sydi-sccm132.vbs

Enjoy !

Michel PICOLLET | EXAKIS Paris
Solution Architect Microsoft [System Center]
mpicollet@event-horizon.fr

Catégories :SCCM Étiquettes : , ,

SCCM – Automating Configuration by Scripting for SCCM Secondary Site Servers

janvier 3, 2012 1 commentaire

Bonjour à tous,

Bonne Année 2012 à toutes et à tous !!! 🙂

hydration_SCR

Pour commencer, je profite de cette nouvelle année 2012 pour vous faire partager un script VBS qui permet d’activer et de configurer tous les rôles d’un site secondaire sous SCCM 2007 SP2.

En rouge : Ce que vous devez modifier
En vert : Les rôles que vous désirez activer. Pour ce faire, supprimer le (‘) se trouvant devant la ligne du rôle que vous souhaitez installer.

Script

‘********************************************************************
‘ Main routine
‘********************************************************************
 
On Error Resume Next

‘ Set variables (site code, system to configure, domain)  
strSiteCode = "MCM"
strComputerName = "SMSMEMBER"
strDomainName = "smsdomain.smsdemo.microsoft.com"
    
‘ Connect to the Configuration Manager server.
Set objConnection = ConnectToSMS(strSiteCode)
    
‘ Load the the site control file.
Set objContext = CreateObject("WbemScripting.SWbemNamedValueSet")
objContext.Add "SessionHandle", objConnection.ExecMethod("SMS_SiteControlFile", "GetSessionHandle").SessionHandle
    
‘ Enable site system.
EnableSiteRole objConnection, objContext, "SMS Site System", strComputerName, strSiteCode, strDomainName

‘ Enable site role(s).
‘ Uncomment site roles to install.
‘ ———————————

‘EnableSiteRole objConnection, objContext, "SMS Branch Distribution Point", strComputerName, strSiteCode, strDomainName
‘EnableSiteRole objConnection, objContext, "SMS Distribution Point", strComputerName, strSiteCode, strDomainName    
‘EnableSiteRole objConnection, objContext, "SMS Fallback Status Point", strComputerName, strSiteCode, strDomainName
‘EnableSiteRole objConnection, objContext, "SMS Management Point", strComputerName, strSiteCode, strDomainName
‘EnableSiteRole objConnection, objContext, "SMS PXE Service Point", strComputerName, strSiteCode, strDomainName
‘EnableSiteRole objConnection, objContext, "SMS Reporting Point", strComputerName, strSiteCode, strDomainName
‘EnableSiteRole objConnection, objContext, "SMS Server Locator Point", strComputerName, strSiteCode, strDomainName
‘EnableSiteRole objConnection, objContext, "SMS Software Update Point", strComputerName, strSiteCode, strDomainName
‘EnableSiteRole objConnection, objContext, "SMS State Migration Point", strComputerName, strSiteCode, strDomainName

‘ Release the site control file
objConnection.Get("SMS_SiteControlFile").ReleaseSessionHandle objContext.Item("SessionHandle").Value

‘ Cleanup
Set strSiteCode = Nothing
Set strComputerName = Nothing 
Set strDomainName = Nothing
Set objConnection = Nothing
Set objContext = Nothing

‘********************************************************************
‘ Function: ConnectToSMS
‘ Description: This routine makes a connection to the specified site code.
‘********************************************************************
Function ConnectToSMS(strSiteCode)

Dim objLocator
Dim objConnection

‘ Initialization
Set objLocator = CreateObject("WbemScripting.SWbemLocator")

‘ Find the provider server
Set objConnection = objLocator.ConnectServer( , "root\sms\site_" & strSiteCode )

‘ Return the connection object
Set ConnectToSMS = objConnection

End Function

‘********************************************************************
‘ Function:    EnableSiteRole
‘ Description: This enables the specified site system role.
‘********************************************************************

Function EnableSiteRole(objConnection, objContext, strSiteRole, strComputerName, strSiteCode, strDomainName)

Dim objRole
Dim objProp
Dim objPropLists
Dim objComponents
Dim objComponent
Dim objComponentProps
Dim strTempSiteRole

‘ Refresh our copy of the site control file.
objConnection.ExecMethod "SMS_SiteControlFile.Filetype=1,Sitecode=’" & strSiteCode & "’", "RefreshSCF", , , objContext

‘ Note: There is no separate site role for a Branch Distribution Point, instead the
IsPeerDP property is enabled
‘ on a SMS Distribution Point role.   
‘ Workaround: Set variable to SMS Distribution Point, if the site role is a Branch

Distribution Point
If strSiteRole = "SMS Branch Distribution Point" Then strTempSiteRole = "SMS Distribution Point" Else strTempSiteRole = strSiteRole End If
    
‘ Retrieve the site control object.
On Error Resume Next
Set objRole = objConnection.Get("SMS_SCI_SysResUse.FileType=2,ItemName=" & Chr(34) & _
"[\" & Chr(34) & "Display=\\\\" &  strComputerName & "\\\" & Chr(34) & "]MSWNET:[\" & Chr(34) & "SMS_SITE=" & _
strSiteCode & "\" & Chr(34) & "]\\\\" & strComputerName & "\\," & strTempSiteRole & Chr(34) & ",ItemType=" & Chr(34) & _
"System Resource Usage" & Chr(34) & ",SiteCode=" & Chr(34) & strSiteCode & Chr(34), , objContext)
       
‘ If the site role already exists, then get the current properties
If Err.Number = 0 then 
objProp = objRole.Props
wscript.echo strTempSiteRole & " already exists. "
wscript.echo "Attempting to enable the site role."

‘ If the site role is not found, then create it
ElseIf CStr(Hex(Err.Number)) = "80041002" then 
Set objRole = objConnection.Get("SMS_SCI_SysResUse").SpawnInstance_
objRole.NALPath  = "[" & Chr(34) & "Display=\\" &  strComputerName & "\" & Chr(34) & "]MSWNET:[" & Chr(34) & "SMS_SITE=" & strSiteCode & Chr(34) & "]\\" & strComputerName & "\"
objRole.NALType  = "Windows NT Server"
objRole.RoleName = strTempSiteRole
objRole.Sitecode = strSiteCode
objProp = Array()
wscript.echo strTempSiteRole & " doesn’t exist. "
wscript.echo "Attempting to create the site role." 
        
‘ On any other error, fail and exit the function
Else
EnableSiteRole = False 
wscript.echo "Unexpected error: 0x" & Hex(Err.Number) & " – " & Err.Description
wscript.echo "Not attempting to enable the site role." 
Exit Function
       
End If

On Error GoTo 0
   
objPropLists = objRole.PropLists
If IsNull(objPropLists) then
objPropLists = Array()
End if

‘ Set the appropriate properties for the specified role
Select Case strSiteRole
                   
Case "SMS Branch Distribution Point"           
SetProperty objConnection, objProp, "IsPeerDP",1, "", ""
SetProperty objConnection, objProp, "MinFreeSpace",50, "", ""
SetProperty objConnection, objProp, "Server Remote Name",0, strComputerName & "." & strDomainName, ""
               
Case "SMS Distribution Point"
SetProperty objConnection, objProp, "Site Info", 0, strComputerName, strSiteCode
SetProperty objConnection, objProp, "BITS download", 1, "", ""
SetProperty objConnection, objProp, "Is protected", 0, "", ""
SetProperty objConnection, objProp, "IsAnonymousEnabled", 1, "", ""
SetProperty objConnection, objProp, "Server Remote Name",0, strComputerName & "." & strDomainName, ""

Case "SMS Fallback Status Point"
SetProperty objConnection, objProp, "FSPInternetFacing",0, "", ""
SetProperty objConnection, objProp, "Server Remote Name",0, "", ""
SetProperty objConnection, objProp, "Throttle Count",10000, "", ""
SetProperty objConnection, objProp, "Throttle Interval",3600000, "", ""
SetProperty objConnection, objProp, "Server Remote Name",0, strComputerName & "." & strDomainName, ""

Case "SMS Management Point"
SetProperty objConnection, objProp, "Server Remote Name",0, strComputerName & "." & strDomainName, ""
                       
Case "SMS PXE Service Point"
SetProperty objConnection, objProp, "IsActive",1, "", ""
SetProperty objConnection, objProp, "BindPolicy",0, "", ""
SetProperty objConnection, objProp, "ResponseDelay",0, "", ""
SetProperty objConnection, objProp, "PXEPassword",0, "", ""

‘SetProperty objConnection, objProp, "AuthType",0, "", ""
‘SetProperty objConnection, objProp, "UserName",0, "", ""
‘SetProperty objConnection, objProp, "CertificateType",0, "", ""
‘SetProperty objConnection, objProp, "CertificateFile",0, "", ""

SetProperty objConnection, objProp, "Server Remote Name",0, strComputerName & "." & strDomainName, ""

Case "SMS Reporting Point"
SetProperty objConnection, objProp, "ReportingPointFolder", 0, "", "SMSReporting_" & strSiteCode
SetProperty objConnection, objProp, "Protocol", 0, "", ""
SetProperty objConnection, objProp, "PortNumber", 80, "", ""

Case "SMS Server Locator Point"
SetProperty objConnection, objProp, "UseSiteDatabase", 1, "", ""
SetProperty objConnection, objProp, "SQLServerName", 0, "", ""
SetProperty objConnection, objProp, "DatabaseName", 0, "", ""
SetProperty objConnection, objProp, "Authentication type", 0, "", ""
SetProperty objConnection, objProp, "UserName", 0, "", ""
SetProperty objConnection, objProp, "Server Remote Name",0, strComputerName & "." & strDomainName, ""
                       
Case "SMS Site System"
SetProperty objConnection, objProp, "Server Remote Name",0, strComputerName & "." & strDomainName, ""
SetProperty objConnection, objProp, "IsProtected",0, "", ""
SetProperty objConnection, objProp, "Server Remote Public Name",0, "", ""
SetProperty objConnection, objProp, "FDMOperation",0, "", ""            
           
Case "SMS Software Update Point"
SetProperty objConnection, objProp, "UseProxy",0, "", ""
SetProperty objConnection, objProp, "ProxyName",0, "", ""
SetProperty objConnection, objProp, "ProxyServerPort",80, "", ""
SetProperty objConnection, objProp, "AnonymousProxyAccess",1, "", ""
SetProperty objConnection, objProp, "UserName",0, "", ""
           
Case "SMS State Migration Point"           
SetProperty objConnection, objProp, "Server Remote Name",0, strComputerName & "." & strDomainName, ""
SetProperty objConnection, objProp, "SMPQuiesceState",0, "", ""
SetProperty objConnection, objProp, "SMPStoreDeletionDelayTimeInMinutes",1440, "", ""
SetProperty objConnection, objProp, "SMPStoreDeletionCycleTimeInMinutes",1440, "", ""
SetPropertyList  objConnection, objPropLists, "Directories", Array("Directory=D:\StateMigration;MaxClients=100;MinDiskSpace=100;MinDiskSpaceUnit=1;")           
                                       
Case Else
wscript.echo " Invalid role specified: " & strSiteRole
EnableSiteRole = False
Exit Function

End Select

‘ Save the (possibly) updated properties.
objRole.Props = objProp
objRole.PropLists = objPropLists

‘ Store the new role instance.
On Error Resume Next
objRole.Put_ , objContext
If Err Then
wscript.echo " Error assigning role " & strSiteRole & " to " & strComputerName & ": " & Err.Description
Err.Clear
Else
wscript.echo " Setting " & strComputerName & " to an " & strSiteRole
End If
On Error GoTo 0
    
‘ Commit the changes to the Site Control file.
Set InParams = objConnection.Get("SMS_SiteControlFile").Methods_("CommitSCF").InParameters.SpawnInstance_
InParams.SiteCode = strSiteCode
objConnection.ExecMethod "SMS_SiteControlFile", "CommitSCF", InParams, , objContext
    
‘ Cleanup
Set objRole = Nothing
Set objProp = Nothing
Set objPropLists = Nothing
Set objComponents = Nothing
Set objComponent = Nothing
Set objComponentProps = Nothing
   
End Function

‘********************************************************************
‘ Function:    SetProperty
‘ Description: This is used to set or create entries in a site control property array.
‘********************************************************************
Function SetProperty(objConnection, objProp, strPropertyName, intValue, strValue1, strValue2)

Dim index
Dim bFoundProperty
Dim objNewProp

bFoundProperty = False

‘ Loop through properties until a match is found and then set the properties using the values passed in.
For index = 0 to UBound(objProp)

If objProp(index).PropertyName = strPropertyName then
                   
bFoundProperty = TRUE
objProp(index).Value = intValue
objProp(index).Value1 = strValue1
objProp(index).Value2 = strValue2
Exit For

End if

Next

‘ If the property doesn’t exist, then create it and set the property values using the values passed in.    
If not bFoundProperty then 
   
Set objNewProp = objConnection.Get("SMS_EmbeddedProperty").SpawnInstance_
objNewProp.PropertyName = strPropertyName
objNewProp.Value = intValue
objNewProp.Value1 = strValue1
objNewProp.Value2 = strValue2

ReDim Preserve objProp(UBound(objProp) + 1)
Set objProp(UBound(objProp)) = objNewProp
       
End if

‘ Cleanup
Set index = Nothing
Set bFoundProperty = Nothing
Set objNewProp = Nothing
     
End Function

‘********************************************************************
‘ Function:    SetPropertyList
‘ Description: This is used to set or create entries in a site control property list array.
‘********************************************************************
Function SetPropertyList(objConnection, objPropLists, strPropertyListName, arrList)

Dim index
Dim bFoundProperty
Dim objNewProp

bFoundProperty = False
   
‘ If the Property List Name already exists, set the values using the arrList variable passed in. 
For index = 0 to UBound(objPropLists)
If objPropLists(index).PropertyListName = strPropertyListName then
bFoundProperty = TRUE
objPropLists(index).Values = arrList
Exit For
End if
Next

‘ If the Property List Name does not exist, create it and set values using the arrList variable passed in.
If not bFoundProperty then
Set objNewProp = objConnection.Get("SMS_EmbeddedPropertyList").SpawnInstance_
objNewProp.PropertyListName = strPropertyListName
objNewProp.Values = arrList

‘ Resize the property list and add the new Property List Name.
ReDim Preserve objPropLists(UBound(objPropLists) + 1)
Set objPropLists(UBound(objPropLists)) = objNewProp
End if
 
‘ Cleanup
Set index = Nothing
Set bFoundProperty = Nothing
Set objNewProp = Nothing
    
End Function

Source :
http://social.technet.microsoft.com/Forums/de-DE/configmgrsdk/thread/d6f7e8b7-7214-4e42-bd20-16136b76a3a4

Enjoy !

Michel PICOLLET | EXAKIS Paris
Consultant Senior Microsoft [System Center]
mpicollet@event-horizon.fr

Catégories :SCCM Étiquettes : , ,

Hyper-V – Comment automatiser la création de plusieurs machines virtuelles ?

décembre 4, 2011 2 commentaires

Bonjour à tous,

Voici un post rapide sur comment automatiser par script la création de plusieurs machines virtuelles en 2 minutes… L’idée m’est venue suite à la réinstallation de mon environnement Hyper-V et du temps qu’on passe souvent à créer et à configurer nos machines…

image

Prérequis

image

Il vous faut télécharger et installer le module Hyper-V à cette adresse :
http://pshyperv.codeplex.com/ 

Script Powershell

Lancer ensuite une console Hyper-V et utilser le script suivant :

#————————————————————————-
# AUTEUR : MICHEL PICOLLET | EXAKIS Paris
# Version : 3.0
#————————————————————————-

#    Usage du script :
#    .\Hyper-V-Create-Virtual-Environment-v3.ps1 -NBVM [X] -Eth [X]
#    -NBVM [X]    : Création de X Machines Virtuelles
#    -Eth  [X]    : Création de X VLAN (Internes) Virtuels
#    MAC Prefix   : 00155D00000[X]
#
#    Exemple d’utilisation :   
#    .\Hyper-V-Create-Virtual-Environment-v3.ps1 -NBVM 8 -Eth 1
#    (Pour la création de 8 Machines virtuelles et 1 VLAN)
#————————————————————————-

Param ([String]$NBVM, [String]$Eth)

if (!(Get-Module | where {$_.Name -eq "HyperV" })) 
{
 
if (Test-Path ‘C:\Program Files\modules\HyperV\HyperV.psd1’)
{
  Import-Module ‘C:\Program Files\modules\HyperV\HyperV.psd1’
  Write-Host " Importation OK" -fore green
}
else
    {
     write-host " Le module Hyper-V n’est pas disponible…" -fore red
     write-host " Veuillez installer le module, veuillez télécharger”
     write-host " le module ici :
http://pshyperv.codeplex.com/"
     break
    }
}
else
   {
     Write-Host "Le module est déjà importé…" -fore yellow
   }

$PathVMS = "D:\Virtualization\"
$PathISO = "D:\Sources\ISO\Windows 2008 Server Full x64 R2 en-us.iso"

#Clear
if ($Eth -eq "") {$Eth=1}
foreach ($e in (0..$Eth))
{
   $Result = Get-VMSwitch
   if ($result.ElementName -eq "Virtual Ethernet $e")
   {
     write-host "Virtual Ethernet $e existe déjà !"
   }
   else
       {
        write-host "Création du VLAN : Virtual Ethernet $e …"
        New-VMInternalSwitch "Virtual Ethernet $e"
       }
}

#Clear
if ($NBVM -eq "") {$NBVM=1}

Foreach ($i in (1..$NBVM))
{
$VM = "Machine $i"
$MAC = "00155D00000" + $i
$Fullpath = $PathVMS + $VM

write-host "1 – Création de la machine:"$VM -fore cyan
New-VM -Name $VM -Path $Fullpath
Set-VMMemory -VM $VM 1024MB

write-host "2 – Création du Vdisk 1…" -fore cyan
New-VHD -Size 300GB -Path "$Fullpath\HDD\Hard_disk1.vhd"
write-host "3 – Ajout du premier Disk 1 sur IDE 0" -fore cyan
Add-VMDisk -VM $VM -ControllerID 0 -LUN 0 -Path "$Fullpath\HDD\Hard_disk1.vhd"

write-host "4 – Ajout du contrôler SCSI" -fore cyan
Add-VMSCSIController $VM

write-host "5 – Ajout du premier Disk SCSI" -fore cyan
New-VHD -Size 300GB -Path "$Fullpath\HDD\Hard_disk2.vhd"
Add-VMDisk -VM $VM -SCSI 0 -LUN 0 -Path "$Fullpath\HDD\Hard_disk2.vhd"

write-host "6 – Ajout du second disk SCSI" -fore cyan
New-VHD -Size 300GB -Path "$Fullpath\HDD\Hard_disk3.vhd"
Add-VMDisk -VM $VM -SCSI 0 -LUN 1 -Path "$Fullpath\HDD\Hard_disk3.vhd"

write-host "7 – Montage de l’ISO" -fore cyan
Add-VMDisk -VM $VM -ControllerID 1 -LUN 0 -Path "$PathISO" –DVD

write-host "8 – Ajout de la Carte réseau" -fore cyan
Add-VMNic -VM $VM -Virtualswitch "Virtual Ethernet $e" -MAC $MAC
#Read-host
}

Note : Attention au Copier/Coller 🙂

Démonstration du script

Lancement de la console Powershell :
powershell.exe -NoExit -ImportSystemModules

image

Exécution de la commande :
.\Hyper-V-Create-Virtual-Environment-v3.ps1 -NBVM 8 -Eth 1

image

Résultats

Après l’exécution du script le VLAN a été créé :

image

Les 8 machines virtuelles ont été créées :

image

La configuration de chaque machine a été faite selon mes souhaits :

image

Bien sûr, ce script peut largement être optimisé… Ceci n’est qu’un premier jet…

Enjoy !

Michel PICOLLET | EXAKIS Paris
Consultant Senior Microsoft [System Center]
mpicollet@event-horizon.fr

Catégories :Hyper-V Étiquettes : , , , ,
%d blogueurs aiment cette page :