Question [Tutoriel]Les modules sous Powershell

Plus d'informations
il y a 11 ans 6 mois #12826 par Laurent Dardenne
La v3 permet de placer une clause #Requires sur les modules :

-Modules <Module-Name> | <Hashtable>
Specifies Windows PowerShell modules that the script requires. Enter the module
name and an optional version number. The Modules parameter is introduced in
Windows PowerShell 3.0.

If the required modules are not in the current session, Windows
PowerShell imports them. If the modules cannot be imported,
Windows PowerShell throws a terminating error.

For each module, type the module name ( <String> ) or a hash table
with the following keys. The value can be a combination of strings
and hash tables.

-- ModuleName. This key is required.
-- ModuleVersion. This key is required.
-- GUID. This key is optional.

For example,
#Requires -Modules PSWorkflow, @{ModuleName=\"PSScheduledJob\";ModuleVersion=1.0.0.0}

Et propose d'intervenir sur le chargement automatique des module via la variable automatique $PSModuleAutoLoadingPreference:

$PSModuleAutoLoadingPreference
Enables and disables automatic importing of modules in the session. \"All\" is the default.

Enables and disables automatic importing of modules in the session.
\"All\" is the default. Regardless of the value of this variable, you
can use the Import-Module cmdlet to import a module.

Valid values are:

All Modules are imported automatically on first-use. To import a
module, get (Get-Command) or use any command in the module.

ModuleQualified
Modules are imported automatically only when a user uses the
module-qualified name of a command in the module. For example,
if the user types \"MyModule\MyCommand\", Windows PowerShell
imports the MyModule module.

None Automatic importing of modules is disabled in the session. To
import a module, use the Import-Module cmdlet.

For more information about automatic importing of modules, see about_Modules
(go.microsoft.com/fwlink/?LinkID=144311).

<br><br>Message édité par: Laurent Dardenne, à: 4/10/12 17:08

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 6 mois #12832 par SiSMik
Le #require je me trompe peut être mais ça ne fait que reprendre une partie du fichier manifeste qui permettait de faire quasiment la même chose non ?

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

Plus d'informations
il y a 11 ans 6 mois #12835 par Laurent Dardenne
benduru écrit:

Le #require je me trompe peut être mais ça ne fait que reprendre une partie du fichier manifeste qui permettait de faire quasiment la même chose non ?

Cette clause concerne les scripts et les fonctions. Le manifeste permet aussi cette dépendances, mais sur d'autre module.

Je n'ai pas encore testé, car je lis la doc et dépile tous les liens glanés depuis 1 an...

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 6 mois #12837 par Laurent Dardenne
Pour PS v3.
Voici un exemple de déclaration du nouveau type de module dans un manifeste de module :
[code:1] NestedModules = @( 'MSFT_ScheduledTask_v1.0.cdxml',
'PS_ScheduledTask_v1.0.cdxml',
'PS_ClusteredScheduledTask_v1.0.cdxml',
'PSScheduledJob',
'PSScheduledJobPrxy.psm1')[/code:1]
Les fichiers cdxml permettent de créer des 'cmdlet over objects' (je ne sais trop comment le traduire) :
[code:1]
&lt;?xml version=\&quot;1.0\&quot; encoding=\&quot;utf-8\&quot;?&gt;
&lt;PowerShellMetadata xmlns=\&quot;schemas.microsoft.com/cmdlets-over-objects/2009/11\">;
&lt;Class ClassName=\&quot;Root/Microsoft/Windows/TaskScheduler/MSFT_ScheduledTask\&quot;&gt;
&lt;Version&gt;1.0&lt;/Version&gt;
&lt;DefaultNoun&gt;ScheduledTask&lt;/DefaultNoun&gt;
&lt;InstanceCmdlets&gt;
&lt;GetCmdletParameters DefaultCmdletParameterSet=\&quot;ByPath\&quot;&gt;
&lt;QueryableProperties&gt;
&lt;Property PropertyName=\&quot;TaskName\&quot;&gt;
&lt;Type PSType=\&quot;string\&quot; /&gt;
&lt;RegularQuery AllowGlobbing=\&quot;true\&quot;&gt;
&lt;CmdletParameterMetadata IsMandatory=\&quot;false\&quot; Position=\&quot;0\&quot; ValueFromPipelineByPropertyName=\&quot;true\&quot; CmdletParameterSets=\&quot;ByPath\&quot; /&gt;
&lt;/RegularQuery&gt;
&lt;/Property&gt;
&lt;Property PropertyName=\&quot;TaskPath\&quot;&gt;
&lt;Type PSType=\&quot;string\&quot; /&gt;
&lt;RegularQuery AllowGlobbing=\&quot;true\&quot;&gt;
&lt;CmdletParameterMetadata IsMandatory=\&quot;false\&quot; Position=\&quot;1\&quot; ValueFromPipelineByPropertyName=\&quot;true\&quot; CmdletParameterSets=\&quot;ByPath\&quot; /&gt;
&lt;/RegularQuery&gt;
&lt;/Property&gt;
&lt;/QueryableProperties&gt;
&lt;/GetCmdletParameters&gt;
&lt;Cmdlet&gt;
&lt;CmdletMetadata Verb=\&quot;Unregister\&quot; ConfirmImpact=\&quot;High\&quot;/&gt;
&lt;Method MethodName=\&quot;cim:«»DeleteInstance\&quot; /&gt;
&lt;/Cmdlet&gt;
&lt;/InstanceCmdlets&gt;
&lt;/Class&gt;
[/code:1]
C'est du XML, mais pour le moment, pour moi, ça ressemble un peu à du chinois :dry:

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 6 mois #12838 par Laurent Dardenne
Laurent Dardenne écrit:

Cette clause concerne les scripts et les fonctions.

Rectification, elle ne concerne que les scripts :
[code:1]
#Requires -Modules PSWorkflow,PSScheduledJob

function ClauseRequire {
#Requires -Modules NeFonctionnePasIci
Write-host \&quot;la suite\&quot;
}
[/code:1]
Et indépendemment du contenu de la variable automatique $PSModuleAutoLoadingPreference, l'exécution du script,déclarant un telle clause, implique le chargement les modules requis.

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 6 mois #12839 par SiSMik
vivement que je puisse jouer avec la v3 !

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

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