[PowerShell] Ajouter un module spécifique

Example avec le Module DataONTAP de NetAPP

Le module est dans le répertoire « D:\TOOLS\netapp\DataONTAP\DataONTAP »

On charge dans une variable le chemin des modules existant.

$mod = [environment]::GetenvironmentVariable("PSModulePath")

On ajoute l’emplacement du nouveau module:

$mod += ";D:\05-TOOLS\netapp\DataONTAP\"

On applique la modification,

[environment]::SetenvironmentVariable("PSModulePath",$mod)

Si le répertoire est conforme, la commande suivante affichera le module:

PS C:\> Get-Module -ListAvailable
ModuleType Name ExportedCommands
---------- ---- ----------------
Manifest ActiveDirectory {}
Manifest AppLocker {}
Manifest BitsTransfer {}
Manifest GroupPolicy {}
Manifest PSDiagnostics {}
Manifest TroubleshootingPack {}
Manifest WebAdministration {}
Manifest DataONTAP {}

On peut l’importer et avec accès au cmdlt:

 import-module DataONTAP

Attention, il faut que le répertoire du module contienne le même nom de répertoire en dessous:

Si le module spécifié dans la variable environment est « c:\dataontap » alors il doit y avoir un répertoire « dataontap » dessous contenant les fichiers, ce qui donne l’arborescance:

"c:\dataontap\dataontap"

Script de modification du BootOrder sur une VM Hyper-V

Pré requis:
Un fichier contenant les VMs à modifier: list-vm.txt

Visualiser le paramètre BootOrder pour toutes les VMs du fichier list-vm.txt :

$scvmmserver=Read-Host -Prompt "Nom du serveur SCVMM"
$cred=get-credential
$bootorder="IdeHardDrive","CD","Floppy","PxeBoot"
$list = gc list-vm.txt
Add-PSSnapin Microsoft.SystemCenter.VirtualMachineManager
Get-VMMServer –ComputerName $scvmmserver -credential $cred
$list | %{ (Get-VM -Name $_).BootOrder } | out-file -append vm_bootorder.txt

Modifier le paramètre BootOrder sur des VMs:

Par étape: Arrêt du serveur / Modification des paramètres / Redémarrage du serveur.

$list | %{ Stop-VM –VM $_ ; Set-VM -VM $_ -BootOrder $bootorder –Verbose ;Start-VM –VM $_ }

Créer un profil Powershell pour charger fonctions et snap-in

Le profil Powershell permet de charger les fonctions perso et Snap-in lors de l’exécution de la console.

Liens Technet: http://technet.microsoft.com/fr-fr/library/ff461033.aspx

Vérification de l’existence du profil:

Test-path $profile

Deux réponses sont possibles:

  • True, le profil existe, il suffit de l’éditer avec un éditeur de texte:
notepad $profile

et ajouter les Snap-in et fonctions nécessaires.

  • False, le profil n’existe pas, il faut le créer:
New-item –type file –force $profile

Le profil Powershell se crée dans le répertoire du profil actuel de l’utilisateur, pour l’éditer:

Notepad $profile

Pour charger le profil Powershell :

. $profile

 

PowerShell – Vérifier l’activation de Windows

Sur un OS Windows 2008 ou plus

Comment vérifier si l’OS est activé avec une requete wmi, avec la classe « SoftwareLicensingProduct »

$computer = "hostname"
$cred = get-credential
Get-WmiObject -credential $cred -Query "SELECT * FROM SoftwareLicensingProduct where PartialProductKey is not null" -computer $computer | ft @{label="LicenseStatus";expression={if($_.licenseStatus -eq 1){"Licensed"}}

Pour lancer cette requette sur une liste de serveur, il suffit de préparer un fichier contenant le nom des serveurs et de l’inclure dans une variable,puis d’utiliser « get-content »

$list = "liste_serveur.txt"
gc $list | %{ Get-WmiObject -credential $cred -Query "SELECT * FROM SoftwareLicensingProduct where PartialProductKey is not null" -computer $_ | ft @{label="LicenseStatus";expression={if($_.licenseStatus -eq 1){"Licensed"}} }

 

 

 

Trouver le niveau fonctionnel du domaine et de la foret

Connaitre le niveau fonctionnel du domaine et de la forêt avec des commandes Powershell:

$rootDSE = ([ADSI]"LDAP://RootDSE")
"defaultNamingContext = " + $rootDSE.defaultNamingContext
"rootdomainNamingContext = " + $rootDSE.rootDomainNamingContext
"configurationNamingContext = " + $rootDSE.configurationNamingContext
"dnsHostName = " + $rootDSE.dnsHostName
$domainFunctionality = $rootDSE.domainFunctionality
$forestFunctionality = $rootDSE.forestFunctionality
""
"Niveau fonctionnel du domaine:"
switch ($domainFunctionality)
{
0 { "Windows 2000 Domain Mode" }
1 { "Windows Server 2003 Interim Domain Mode" }
2 { "Windows Server 2003 Domain Mode" }
}
""
"Niveau fonctionnel de la forêt:"
switch ($forestFunctionality)
{
0 { "mixed level forest" }
1 { "Windows Server 2003 Interim Forest Level"}
2 { "Windows Server 2003 Forest Level"}
}

Avec la commande « dsquery », trouver niveau fonctionnel du domaine:

dsquery * <domainDN> -scope -base -attr msDS-Behavior-Version
..msDS-Behavior-Version
..2

ou en automatisant pour trouver la valeur de <DomainDN>:

for /f %i in ('adfind -rootdse defaultNamingContext -list') do dsquery * %i -scope base -attr msDS-Behavior-Version

et le niveau fonctionnel de la forêt:

dsquery * cn=Partitions,cn=configuration,<forestRootDN> -scope base -attr msDS-Behavior-Version
..ms-DS-Behavior
..2

ou en automatisant pour trouver la valeur de <ForestRootDN>:

for /f %i in ('adfind -rootdse configurationNamingContext -list') do dsquery * cn=Partitions,%i -scope base -attr msDS-Behavior-Version