Question Utilisation de fonction

Plus d'informations
il y a 15 ans 3 mois #8936 par Laurent AQUATIAS
Bonjour,

N'etant pas encore familier avec powershell, mais plutot avec du kornshell et du bat, je cherche a creer une fonction qui me retournerai le type de l'OS 32 ou 64 bits.

je me suis tres fortement inspiré d'un script de la bibliothèque, mais je n'arrive pas à obtenir le résultat souhaité.

voici mon script et ma fonction (très avancée) :
script1.ps1 :

Function Get-OSArchitecture
{
param ([String]$ComputerName = '.')
Get-WmiObject -computer $ComputerName Win32_OperatingSystem | Format-List OSArchitecture
}
Get-OSArchitecture


Une fois lancé je recupère dans la console :
PS ./Script1.ps1
OSArchitecture : 64 bits

Je voudrai ensuite mettre une partie du résultat affiché dans une variable (qui ne contient que 64 ou 32 pour etre précis)

En ksh, j'aurai utiliser cut.
Mais le résultat étant un objet, je ne sais pas comment récupérer son contenu.

Pourriez vous me donner une piste ou une solution ?

D'avance merci.

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

Plus d'informations
il y a 15 ans 3 mois #8937 par Richard Lazaro
Réponse de Richard Lazaro sur le sujet Re:Utilisation de fonction
Bonjour,

Est ce que ton script doit se dérouler en local ou sur des machines distantes ?
Car sinon il y a plus simple et moins gourmand.

Il existe un type d'objet qui a une taille mémoire variable en fonctione de l'architecture de l'OS, c'est leIntPtr.

Si on regarde les membres de cet objet, on remarque un attribut Size qui renvoie soit 4 si c'est un environnement sur 32 bits ou 8 si c'est un environnement sur 64 bits.

Je préfère dire environnement, car si tu lance la console en x86 (32 bits) sur un OS 64bits tu auras une taille à 4.

donc voici le code que je te propose si c'est une execution local :

[code:1]
if([IntPtr]::«»Size -eq 4) {
$var = 32
} else {
$var = 64
}
[/code:1]

ou bien

[code:1]
$var = [IntPtr]::«»Size * 8
[/code:1]

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\"Problems cannot be solved by the same level of thinking that created them.\\" - Albert Einstein

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

Plus d'informations
il y a 15 ans 3 mois #8938 par Laurent AQUATIAS
Réponse de Laurent AQUATIAS sur le sujet Re:Utilisation de fonction
Bonjour et merci,

J'avais aperçu cette possibilité, mais mon script doit pouvoir s'executer en remote.

Dans un premier temps, cela me conviens parfaitement.

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

Plus d'informations
il y a 15 ans 3 mois #8939 par Richard Lazaro
Réponse de Richard Lazaro sur le sujet Re:Utilisation de fonction
Ok, donc tu as besoin de requêter des ordinateur distant avec WMI.

Donc je te propose cela :

[code:1]
Function Get-OSArchitecture
{
param ([String]$ComputerName = '.')

Write-Output (Get-WmiObject -computer $ComputerName Win32_OperatingSystem).OSArchitecture.SubString(0,2)

}

[/code:1]

et donc pour récupèrer le retour dans une variable :

[code:1]
$var = Get-OSArchitecture
[/code:1]

Je suis parti sur un substring, car les deux possibilités remontées sont \"32-bits\" ou \"64 bits\"

J'espère que cela te va.

Bien Cordialement,
Richard Lazaro.<br><br>Message édité par: Richard Lazaro, à: 17/02/11 16:24

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

Plus d'informations
il y a 15 ans 3 mois #8942 par Laurent AQUATIAS
Réponse de Laurent AQUATIAS sur le sujet Re:Utilisation de fonction
Merci de l'aide efficace

J'étais sur cette piste mais il me manquait : .SubString(0,2) pour faire le découpage et ensuite assigner le resultat cette fois sous forme de string dans une variable.

En continuant le portage de mon bat/ksh vers ps, je cherche comment creer une arborescence de répertoire (vides)(par ex : c:\Temp\Temp1\Temp2).
Je ne vois pas comment faire avec new-item, la commande unix equivalente est mkdir -p /tmp/tmp1/tmp2.

Si les répertoires n'existe pas ils sont tous crées, y a t il qqch du meme type avec les bonnes options de new-item -path -name ???

J'ai fait une recherche avec mon ami Google, je trouve bien des scripts de destruction d'arborescence mais rien pour la création.

Je vais tenter une fonction avec comme parametre d'entrée le chemin (complet).

J'avance doucement, mais ca avance.

Cordialement.
Lauradsl

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

Plus d'informations
il y a 15 ans 3 mois #8943 par Richard Lazaro
Réponse de Richard Lazaro sur le sujet Re:Utilisation de fonction
Tu peux faire :

[code:1]
New-Item C:\Toto\Toto1\Toto2\Toto3 -ItemType Directory
[/code:1]

La commande crée tout les répertoires necessaire jusqu'à Toto3.

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

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