Question Script pour prérequis d'exchange 2007

Plus d'informations
il y a 11 ans 10 mois #2830 par Tartar
Bonjour,

Je suis actuellement occupé à développer un script qui install les prérequis pour Exchange2007 en powershell.

Je bloque sur le .Net framework.
Comment puis-je savoir si .NET est installé et si oui qu'elle version?

J'ai tester la class WIN32_Product mais malheureusement celle-ci ne tourne pas sur un Server 2003.

Avez vous une idée?

merci
Tarik

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #2834 par Laurent Dardenne
Bonjour,
tarik.boukhris écrit:

Je bloque sur le .Net framework.
Comment puis-je savoir si .NET est installé et si oui qu'elle version?

Tu installes ces pré-requis en remote ?
Car pour utiliser PS il faut le framework 2.0 d'installé.

En Win32 interroge la registry : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup

Sous .NET Environment.Version renvoie la version courante. Ensuite les versions les + récentes intégrent les anciennes.

voir aussi : www.codeproject.com/KB/mcpp/DotNetTester.aspx
[edit]
pour W2003 le provider WMI doit être installé
www.microsoft.com/technet/scriptcenter/r...a/jul05/hey0712.mspx

forums.techarena.in/server-scripting/738510.htm

Message édité par: Laurent Dardenne, à: 22/09/08 15:37

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #2840 par Tartar
Merci pour votre aide, voici un bout de code:
[code:1]function ExecuteSoftware([string]$file,[string]$param){
#write-host \"Installing \" $file
$si = new-object diagnostics.processstartinfo
$si.filename = $file
$si.UseShellExecute = $false
$si.Arguments = $param
$Process = [System.Diagnostics.Process]::«»Start($si)
$Process.WaitForExit()
}
function GetKeyChoice([string]$App) {
$caption = \"Confirm\";
$message = \"Do you want to install \"+ $App +\" ?\";
$Desc1 = \"Install \"+[string]$App
$Desc2 = \"Do not install \"+[string]$App
$yes = new-Object System.Management.Automation.Host.ChoiceDescription \"&Yes\",$Desc1;
$no = new-Object System.Management.Automation.Host.ChoiceDescription \"&No\",$Desc2;
$choices = [System.Management.Automation.Host.ChoiceDescription[]]($yes,$no);
return $Host.ui.PromptForChoice($caption,$message,$choices,0)
}[/code:1]
[code:1] ##install WMI Provider component
$answer = GetKeyChoice \"WMI Provider component\"

switch ($answer){
0 {
Write-Host \"Installing WMI Provider component\";
ExecuteSoftware(\"C:\Windows\System32\Sysocmgr.exe\",\"/i:%windir%\inf\sysoc.inf /u:\"+ $HotfixesPath + \"\config.inf\"«»)
}
1 {}
}[/code:1]
[code:1] ## Check if the .NET framework is installed
$KeyNET20 = Get-WmiObject -Class Win32_Product -ComputerName . | Where-Object -FilterScript {$_.Name -eq \"Microsoft .NET Framework 2.0\"}
$KeyNET30 = Get-WmiObject -Class Win32_Product -ComputerName . | Where-Object -FilterScript {$_.Name -eq \"Microsoft .NET Framework 3.0\"}

if(!$KeyNET20){
Write-Host \"Microsoft .NET Framework 2.0 is not installed\";

$answer = GetKeyChoice \"Microsoft .NET Framework 2.0\"

switch ($answer){
0 {

Write-Host \"Installing Microsoft .NET Framework 2.0\";
$Soft = $HotfixesPath + \"\Mandatory\02_NetFx64.exe\"
RunSoftware $Soft
Write-Host \"Installing Microsoft .NET Framework 2.0 SP1\";
$Soft = $HotfixesPath + \"\Mandatory\03_NDP20-KB926776-X64.exe\"
RunSoftware $Soft
}
1 {\"End of the script ...\"; break}
}
}

if(!$KeyNET30){
Write-Host \"Microsoft .NET Framework 3.0 is not installed\";

$answer = GetKeyChoice \"Microsoft .NET Framework 3.0\"

switch ($answer){
0 {
Write-Host \"Installing Microsoft .NET Framework 3.0\";
$Soft = $HotfixesPath + \"\Mandatory\06_dotnetfx3_x64.exe\"
RunSoftware $Soft
}
1 {\"End of the script ...\"; break}
}
}[/code:1]

N'hésitez pas à me corriger.

Bien à vous,
Tarik

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #2844 par Laurent Dardenne
Tu supposes ton installation en une passe, de l'indiquer ne serait pas de trop.
Il est préférable de déclarer des constantes pour les valeurs de retour 0,1 c'est pas trop causant:
[code:1]
Set-Variable YES -value ([uint32] 0x1) -option constant -scope Script
[/code:1]

Le code de test sur la version du fx pourrait-être factorisé. De plus comme tu es sous PS en local (-ComputerName . )la version 2.0 est forcément installé et sinon l'installation du 3.0 installe la version 2.0.
Peut être que ce test doit se faire sous Win32, en batch ou vbs.. ?

Et enfin pour ma gouverne, une fois le provider WMI installé n'est-il pas nécessaire de relancer le service WMI ?

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #2846 par Laurent Dardenne
Un petit essaie de factorisation :
[code:1]
function local:InstallFX([string] $Version,[Hastable] $Data)
{

$Fx=\"Microsoft .NET Framework $Version\"
Write-Host \"$Fx is not installed\";

$answer = GetKeyChoice $Fx

switch ($answer){
$YES {
Write-Host $FX
$Soft = $HotfixesPath + \"\Mandatory\\"+$Data.$Version.HotFix
RunSoftware $Soft
if ($Data.$Version.HotFixSP -ne $null)
{
Write-Host \"Installing $FX SP1\";
$Soft = $HotfixesPath + \"\Mandatory\\"+$Data.$Version.HotFixSP
RunSoftware $Soft
}
}
$NO {
Write-Host \"End of the script ...\"; break
}
}
}

$DotNETData=@{}
$DotNETData.\"2.0\"=@{HotFix=\"02_NetFx64.exe\"; HotFixSP=\"03_NDP20-KB926776-X64.exe\"}
$DotNETData.\"3.0\"=@{HotFix=\"06_dotnetfx3_x64.exe\"; HotFixSP=$Null}
Set-Variable YES -value ([uint32] 0x0) -option constant -scope Script
Set-Variable NO -value ([uint32] 0x1) -option constant -scope Script

if(!$KeyNET20)
{ InstallFX \"2.0\" $DotNETData }

if(!$KeyNET30)
{ InstallFX \"3.0\" $DotNETData }

[/code:1]
Selon l'usage, la structure de données $DotNETData peut être déplacée dans la fonction installFX.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 11 ans 10 mois #2853 par Tartar
merci ta solution est d'une grande aide.
Cependant sur mon serveur Win2003, après avoir installer WMI provider et fait un reboot.

le code suivant:
[code:1]$KeyNET20 = Get-WmiObject -Class Win32_Product -ComputerName $CompName | Where-Object -FilterScript {$_.Name -eq \"Microsoft .NET Framework 2.0\"}[/code:1]

renvoi une valeur null, alors que fx2.0 est installé. as tu une idée?

Comment puis je récuperer en pwshell le KB Article number d'un hotfix? avec get-itemproperty?

merci pour ces éclaircissements,
Tarik

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.262 secondes
Propulsé par Kunena