Question
Confirmer un bug MS Connect
- xyz
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 10 mois #20409
par xyz
Tutoriels PowerShell
Confirmer un bug MS Connect a été créé par xyz
Salut,
si l'un(e) d'entre-vous à 5 mn pour confirmer ce bug \" Test-ModuleManifest causing exception: Illegal characters in path \"
Pour télécharger directement le fichier joint.
Je viens d'y passer 2 heures, sans résultat
Je supposes une collision de méthode d'extension, mais je n'ai rien pour le prouver
J'ai rencontré le pb sur le manifeste d'un module qui est prod (V2), c'est donc le cmdlet Test-ModuleManifest, en V4, qui fait des siennes.
La bonne nouvelle est que si on n'utilise pas le cmdlet Test-ModuleManifest, on n'a pas de problème
si l'un(e) d'entre-vous à 5 mn pour confirmer ce bug \" Test-ModuleManifest causing exception: Illegal characters in path \"
Pour télécharger directement le fichier joint.
Je viens d'y passer 2 heures, sans résultat
Je supposes une collision de méthode d'extension, mais je n'ai rien pour le prouver
J'ai rencontré le pb sur le manifeste d'un module qui est prod (V2), c'est donc le cmdlet Test-ModuleManifest, en V4, qui fait des siennes.
La bonne nouvelle est que si on n'utilise pas le cmdlet Test-ModuleManifest, on n'a pas de problème
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 10 mois #20410
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Confirmer un bug MS Connect
Je confirme le même pb sur une VM Windows 8.1 installé il y a peu.
Allez, un autre pour la route. Le cmdlet Test-ModuleManifest semble utiliser le cache PS et ne mets pas à jour le champ modulelist:
[code:1]
#chemin du cache :
# \"$env:home\AppData\Local\Microsoft\Windows\PowerShell\CommandAnalysis\"
md \"$PsProfile\Modules\Test\" -EA SilentlyContinue
@'
@{
ModuleVersion=\"1.0.0.0\"
ModuleToProcess=join-path $PSScriptRoot \"Test.psm1\"
Modulelist=@('Test')
}
'@ > \"$PsProfile\Modules\Test\Test.psd1\"
@'
function TestGet-Gracious { \"Test\" }
'@ > \"$PsProfile\Modules\Test\Test.psm1\"
Test-ModuleManifest \"$PsProfile\Modules\Test\Test.psd1\"|Select ModuleList
# ModuleList
#
# {Test}
@'
@{
ModuleVersion=\"1.0.0.0\"
ModuleToProcess=join-path $PSScriptRoot \"Test.psm1\"
Modulelist=@('Test','MyModule')
}
'@ > \"$PsProfile\Modules\Test\Test.psd1\"
Test-ModuleManifest \"$PsProfile\Modules\Test\Test.psd1\"|Select ModuleList
# ModuleList
#
# {Test} #???
#Vide le cache Powershell
Get-Module -ListAvailable –Refresh
#or close the ps console and reopen a new console
Test-ModuleManifest \"$PsProfile\Modules\Test\Test.psd1\"|Select ModuleList
# ModuleList
#
# {Test, MyModule}
@'
@{
ModuleVersion=\"1.0.0.0\"
ModuleToProcess=join-path $PSScriptRoot \"Test.psm1\"
Modulelist=@('Test')
}
'@ > \"$PsProfile\Modules\Test\Test.psd1\"
Test-ModuleManifest \"$PsProfile\Modules\Test\Test.psd1\"|Select ModuleList
# ModuleList
#
# {Test, MyModule} #???
[/code:1]
Celui-ci est plus gênant lors de la phase de mise au point.
Allez, un autre pour la route. Le cmdlet Test-ModuleManifest semble utiliser le cache PS et ne mets pas à jour le champ modulelist:
[code:1]
#chemin du cache :
# \"$env:home\AppData\Local\Microsoft\Windows\PowerShell\CommandAnalysis\"
md \"$PsProfile\Modules\Test\" -EA SilentlyContinue
@'
@{
ModuleVersion=\"1.0.0.0\"
ModuleToProcess=join-path $PSScriptRoot \"Test.psm1\"
Modulelist=@('Test')
}
'@ > \"$PsProfile\Modules\Test\Test.psd1\"
@'
function TestGet-Gracious { \"Test\" }
'@ > \"$PsProfile\Modules\Test\Test.psm1\"
Test-ModuleManifest \"$PsProfile\Modules\Test\Test.psd1\"|Select ModuleList
# ModuleList
#
# {Test}
@'
@{
ModuleVersion=\"1.0.0.0\"
ModuleToProcess=join-path $PSScriptRoot \"Test.psm1\"
Modulelist=@('Test','MyModule')
}
'@ > \"$PsProfile\Modules\Test\Test.psd1\"
Test-ModuleManifest \"$PsProfile\Modules\Test\Test.psd1\"|Select ModuleList
# ModuleList
#
# {Test} #???
#Vide le cache Powershell
Get-Module -ListAvailable –Refresh
#or close the ps console and reopen a new console
Test-ModuleManifest \"$PsProfile\Modules\Test\Test.psd1\"|Select ModuleList
# ModuleList
#
# {Test, MyModule}
@'
@{
ModuleVersion=\"1.0.0.0\"
ModuleToProcess=join-path $PSScriptRoot \"Test.psm1\"
Modulelist=@('Test')
}
'@ > \"$PsProfile\Modules\Test\Test.psd1\"
Test-ModuleManifest \"$PsProfile\Modules\Test\Test.psd1\"|Select ModuleList
# ModuleList
#
# {Test, MyModule} #???
[/code:1]
Celui-ci est plus gênant lors de la phase de mise au point.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 10 ans 10 mois #20412
par Philippe
Réponse de Philippe sur le sujet Re:Confirmer un bug MS Connect
salut Laurent
alors les résultat de mes tests :
un correctif en server 2012 ??
regarde le BuildVersion de la version de powershell !
serveur 2008 R2 powershell V2 :
[code:1]Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. Tous droits réservés.
PS C:\Users\xxx> $PSVersionTable
Name Value
----
CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
PS C:\Users\xxx> cd\
PS C:\> Test-ModuleManifest c:\Test.psd1
ModuleType Name ExportedCommands
----
Manifest Test {}
PS C:\>
[/code:1]
Windows 7 x64 et server 2008R2, powershell V4 :[code:1]Windows PowerShell
Copyright (C) 2013 Microsoft Corporation. Tous droits réservés.
PS C:\Users\xxx> cd \
PS C:\> Test-ModuleManifest c:\Test.psd1
AVERTISSEMENT : Le membre du module de manifeste « ModuleToProcess » est déconseillé. Utilisez plutôt le membre « RootModule ».
Test-ModuleManifest : Caractères non conformes dans le chemin d'accès.
Au caractère Ligne:1 : 1
+ Test-ModuleManifest c:\Test.psd1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:«») [Test-ModuleManifest], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.TestModuleManifestCommand
PS C:\> $PSVersionTable
Name Value
----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 6.3.9600.16406
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
PS C:\>[/code:1]
serveur 2012 R2 powershell V4 : [code:1]Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. Tous droits réservés.
PS C:\Users\xxx> cd\
PS C:\> $PSVersionTable
Name Value
----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 6.3.9600.17400
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
PS C:\> Test-ModuleManifest c:\Test.psd1
AVERTISSEMENT : Le membre du module de manifeste « ModuleToProcess » est déconseillé. Utilisez plutôt le membre
« RootModule ».
ModuleType Version Name ExportedCommands
----
Script 1.0 Test test
PS C:\>
[/code:1]
alors les résultat de mes tests :
un correctif en server 2012 ??
regarde le BuildVersion de la version de powershell !
serveur 2008 R2 powershell V2 :
[code:1]Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. Tous droits réservés.
PS C:\Users\xxx> $PSVersionTable
Name Value
----
CLRVersion 2.0.50727.5485
BuildVersion 6.1.7601.17514
PSVersion 2.0
WSManStackVersion 2.0
PSCompatibleVersions {1.0, 2.0}
SerializationVersion 1.1.0.1
PSRemotingProtocolVersion 2.1
PS C:\Users\xxx> cd\
PS C:\> Test-ModuleManifest c:\Test.psd1
ModuleType Name ExportedCommands
----
Manifest Test {}
PS C:\>
[/code:1]
Windows 7 x64 et server 2008R2, powershell V4 :[code:1]Windows PowerShell
Copyright (C) 2013 Microsoft Corporation. Tous droits réservés.
PS C:\Users\xxx> cd \
PS C:\> Test-ModuleManifest c:\Test.psd1
AVERTISSEMENT : Le membre du module de manifeste « ModuleToProcess » est déconseillé. Utilisez plutôt le membre « RootModule ».
Test-ModuleManifest : Caractères non conformes dans le chemin d'accès.
Au caractère Ligne:1 : 1
+ Test-ModuleManifest c:\Test.psd1
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:«») [Test-ModuleManifest], ArgumentException
+ FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.TestModuleManifestCommand
PS C:\> $PSVersionTable
Name Value
----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 6.3.9600.16406
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
PS C:\>[/code:1]
serveur 2012 R2 powershell V4 : [code:1]Windows PowerShell
Copyright (C) 2014 Microsoft Corporation. Tous droits réservés.
PS C:\Users\xxx> cd\
PS C:\> $PSVersionTable
Name Value
----
PSVersion 4.0
WSManStackVersion 3.0
SerializationVersion 1.1.0.1
CLRVersion 4.0.30319.34209
BuildVersion 6.3.9600.17400
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion 2.2
PS C:\> Test-ModuleManifest c:\Test.psd1
AVERTISSEMENT : Le membre du module de manifeste « ModuleToProcess » est déconseillé. Utilisez plutôt le membre
« RootModule ».
ModuleType Version Name ExportedCommands
----
Script 1.0 Test test
PS C:\>
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 10 mois #20413
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Confirmer un bug MS Connect
Salut 6ratgus,
merci pour tes tests
6ratgus écrit:
J'ai la build 6.3.9600.16406 (Seven 64), en v2 le test du manifeste fonctionne.
Je ne vais pas passer plus de temps la dessus, au pire il y a cette approche , mais qui est à éviter en prod.
merci pour tes tests
6ratgus écrit:
Je ne sais pas :/un correctif en server 2012 ??
J'ai la build 6.3.9600.16406 (Seven 64), en v2 le test du manifeste fonctionne.
Je ne vais pas passer plus de temps la dessus, au pire il y a cette approche , mais qui est à éviter en prod.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- xyz
- Auteur du sujet
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 69
il y a 10 ans 10 mois #20415
par xyz
Tutoriels PowerShell
Réponse de xyz sur le sujet Re:Confirmer un bug MS Connect
Laurent Dardenne écrit:

Une autre approche en mode bricole :
[code:1]
$Path=Get-Item 'C:\Temp\Modules\Test\Test.Psd1'
try {
Push-Location
#Se place dans le répertoire du fichier, cf. $PsScriptRoot
Set-Location $Path.DirectoryName
$Result=Test-ModuleManifest $Path -EA Stop
} catch {
# System.MissingMemberException et CategoryInfo=ResourceUnavailable :
# N'est pas un manifeste ou contient du code qui n'est pas supporté ou un manifeste erroné (clé minimal manquante)
#
# [System.InvalidOperationException] {
# InvalidOperationException et CategoryInfo=InvalidData :
# clé en trop ou en moins, n'est pas un manifeste ou un manifeste erroné.
if (($_.Exception -is [System.ArgumentException]) -and ($_.Exception.TargetSite -match 'HasExtension\('))
{
try {
$Result=ipmo $Path -PassThru -scope Local
} finally {
if ($null -ne $Result)
{
#L'objet PSModuleInfo ($Result) existe indépendamment du module
Remove-Module $Result.Name
}
}
}
else
{ $Result=$null }
} finally {
Pop-Location
$Result
}
[/code:1]
Si cela fonctionne on récupère un objet de même type que celui émis par Test-ModuleManifest.
On pourrait cloisonner en utilisant un Job, mais dans ce cas l'objet de type PSModuleInfo sera désérialisé
Ce qui fait qu'une fonction attendant un paramètre de type PSModuleInfo ne fonctionnerait plus...
A moins d'utiliser un attribut de validation :
[code:1]
[ValidateScript(
{($_.GetType().IsSubclassOf([PSModuleInfo])) -or
($_.GetType().IsSubclassOf([Deserialized.PSModuleInfo])) })]
[/code:1]
Eh hop ! Un autre tour de manège
Ou alors un petit peu plusJe ne vais pas passer plus de temps la dessus
Une autre approche en mode bricole :
[code:1]
$Path=Get-Item 'C:\Temp\Modules\Test\Test.Psd1'
try {
Push-Location
#Se place dans le répertoire du fichier, cf. $PsScriptRoot
Set-Location $Path.DirectoryName
$Result=Test-ModuleManifest $Path -EA Stop
} catch {
# System.MissingMemberException et CategoryInfo=ResourceUnavailable :
# N'est pas un manifeste ou contient du code qui n'est pas supporté ou un manifeste erroné (clé minimal manquante)
#
# [System.InvalidOperationException] {
# InvalidOperationException et CategoryInfo=InvalidData :
# clé en trop ou en moins, n'est pas un manifeste ou un manifeste erroné.
if (($_.Exception -is [System.ArgumentException]) -and ($_.Exception.TargetSite -match 'HasExtension\('))
{
try {
$Result=ipmo $Path -PassThru -scope Local
} finally {
if ($null -ne $Result)
{
#L'objet PSModuleInfo ($Result) existe indépendamment du module
Remove-Module $Result.Name
}
}
}
else
{ $Result=$null }
} finally {
Pop-Location
$Result
}
[/code:1]
Si cela fonctionne on récupère un objet de même type que celui émis par Test-ModuleManifest.
On pourrait cloisonner en utilisant un Job, mais dans ce cas l'objet de type PSModuleInfo sera désérialisé
Ce qui fait qu'une fonction attendant un paramètre de type PSModuleInfo ne fonctionnerait plus...
A moins d'utiliser un attribut de validation :
[code:1]
[ValidateScript(
{($_.GetType().IsSubclassOf([PSModuleInfo])) -or
($_.GetType().IsSubclassOf([Deserialized.PSModuleInfo])) })]
[/code:1]
Eh hop ! Un autre tour de manège
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Philippe
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 1778
- Remerciements reçus 21
il y a 10 ans 10 mois #20421
par Philippe
Réponse de Philippe sur le sujet Re:Confirmer un bug MS Connect
Laurent sur ce coup je vais te laissé dans l.....
ton dernier post ma donné mal a la tête
pas bon l'alcool au repas de service avant les vacances !!
bonne vacances
PS : j'attend toujours ton script automatisation du repos
ton dernier post ma donné mal a la tête
pas bon l'alcool au repas de service avant les vacances !!
bonne vacances
PS : j'attend toujours ton script automatisation du repos
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.042 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Confirmer un bug MS Connect