Question Confirmer un bug MS Connect

Plus d'informations
il y a 10 ans 10 mois #20409 par xyz
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 :angry:
Je supposes une collision de méthode d'extension, mais je n'ai rien pour le prouver :pinch:

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.

Plus d'informations
il y a 10 ans 10 mois #20410 par xyz
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.

Tutoriels PowerShell

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

Plus d'informations
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]

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

Plus d'informations
il y a 10 ans 10 mois #20413 par xyz
Réponse de xyz sur le sujet Re:Confirmer un bug MS Connect
Salut 6ratgus,
merci pour tes tests :)
6ratgus écrit:

un correctif en server 2012 ??

Je ne sais pas :/
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.

Plus d'informations
il y a 10 ans 10 mois #20415 par xyz
Réponse de xyz sur le sujet Re:Confirmer un bug MS Connect
Laurent Dardenne écrit:

Je ne vais pas passer plus de temps la dessus

Ou alors un petit peu plus :P
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é :lol:
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.

Plus d'informations
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 :blink:
pas bon l'alcool au repas de service avant les vacances !! :sick:

bonne vacances B)
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.043 secondes
Propulsé par Kunena