Question [V3-Fonction]Proxy de Get-Help

Plus d'informations
il y a 11 ans 6 mois #12791 par Laurent Dardenne
Voici, pour PowerShell V3.0, une fonction permettant d'adresser l'aide US au lieu de pointer sur l'aide Fr.
Pour le moment le produit est localisé, mais pas les fichiers d'aides.
Le principe de ce proxy est de modifier la culture courante avant d'appeler le cmdlet Get-Help d'origine, celui-ci se base sur la fonction Using-Culture :
[code:1]
Function Get-Help {
[CmdletBinding(DefaultParameterSetName='AllUsersView', HelpUri='go.microsoft.com/fwlink/?LinkID=113316')]

param(
[Parameter(Position=0, ValueFromPipelineByPropertyName=$true)]
[string]
${Name},

[string]
${Path},

[ValidateSet('Alias','Cmdlet','Provider','General','FAQ','Glossary','HelpFile','ScriptCommand','Function','Filter','ExternalScript','All','DefaultHelp','Workflow')]
[string[]]
${Category},

[string[]]
${Component},

[string[]]
${Functionality},

[string[]]
${Role},

[Parameter(ParameterSetName='DetailedView', Mandatory=$true)]
[switch]
${Detailed},

[Parameter(ParameterSetName='AllUsersView')]
[switch]
${Full},

[Parameter(ParameterSetName='Examples', Mandatory=$true)]
[switch]
${Examples},

[Parameter(ParameterSetName='Parameters', Mandatory=$true)]
[string]
${Parameter},

[Parameter(ParameterSetName='Online', Mandatory=$true)]
[switch]
${Online},

[Parameter(ParameterSetName='ShowWindow', Mandatory=$true)]
[switch]
${ShowWindow},

[System.Globalization.CultureInfo]
${Culture} = \"en-US\" #Using-Culture
)

begin
{
try {
$outBuffer = $null
if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer))
{
$PSBoundParameters = 1
}

$OldCulture = [Threading.Thread]::CurrentThread.CurrentCulture
$OldUICulture = [Threading.Thread]::CurrentThread.CurrentUICulture

$wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Get-Help', [System.Management.Automation.CommandTypes]::Cmdlet)
if ($Culture)
{
[Void]$PSBoundParameters.Remove(\"Culture\"«»)
$scriptCmd = {& $wrappedCmd @PSBoundParameters }
}
[Threading.Thread]::CurrentThread.CurrentCulture = $culture
[Threading.Thread]::CurrentThread.CurrentUICulture = $culture
$scriptCmd = {& $wrappedCmd @PSBoundParameters }

$steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
$steppablePipeline.Begin($PSCmdlet)
} catch {
throw
}

}

process
{
try {
$steppablePipeline.Process($_)
} catch {
throw
}
}

end
{
try {
$steppablePipeline.End()
} catch {
throw
}
finally {
[Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture
[Threading.Thread]::CurrentThread.CurrentUICulture = $OldUICulture
}
}
<#

.ForwardHelpTargetName Get-Help
.ForwardHelpCategory Cmdlet

#>
}
[/code:1]
Un exemple :
[code:1]
#Pointe par défaut sur la version US
Get-help get-command -full
#Pointe sur la version indiquée
Get-help get-command -full -Culture fr-FR
[/code:1]
En cas de doublons de nom entre une fonction et un cmdlet, l'exécution des fonctions est prioritaire.

Une fonction à placer provisoirement dans votre profile utilisateur Powershell.

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 6 mois #12808 par Matthew BETTON
Salut,

Merci Laurent ;)

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

Plus d'informations
il y a 11 ans 5 mois #12813 par Laurent Dardenne
Une légére modification, avec la version 3.0 l'attribut Cmdletbinding déclare 3 propriètés supplémentaires , ce qui fait qu'une fois la version 3.0 installée :
    MS propose la version 2.0 et 3.0 dans une même distribution,
    Powershell partage le même profile pour la v3 et la v2 (Powershell.exe -Version 2.0),
en conséquence on doit soit gérer le code selon la version, plusieurs approches possibles, SI possible utiliser un code commun.

Afin que cette fonction soit compatible V2 et V3 il faut supprimer le paramètre HelpUri :
[code:1]
Function Get-Help {
[CmdletBinding(DefaultParameterSetName='AllUsersView')]

param(
[/code:1]
Cette fonction sera valide pour les deux versions. Et si vous avez le temps faîtes un copier/coller du code dans une console v3 puis dans une console v2.
Ce Powershel est un sacré parseur :silly:

Je sens qu'on ne pas s'ennuyer avec cette version ...<br><br>Message édité par: Laurent Dardenne, à: 30/09/12 12:40

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 5 mois #12819 par Laurent Dardenne
Le paramètre -Online ne fonctionne pas avec le proxy, à priori la gestion MAML utilise la culture courante...
On obtient une erreur :
[code:1]
get-help get-content -online
#get-help : The online version of this Help topic cannot be displayed because the Internet address (URI) of the Help
#topic is not specified in the command code or in the help file for the command.
[/code:1]
Du coup on essaie avec le cmdlet d'origine et la culture US :
[code:1]
Using-Culture \&quot;en-US\&quot; { Microsoft.PowerShell.Core\get-help get-content -online}
#Microsoft.PowerShell.Core\get-help : The online version of this Help topic cannot be displayed because the Internet
#address (URI) of the Help topic is not specified in the command code or in the help file for the command.
[/code:1]
Même chose.

Utilisons la culture courante :
[code:1]
Microsoft.PowerShell.Core\get-help get-content -online
#http://technet.microsoft.com/fr-FR/library/dd347719.aspx
[/code:1]
Ce qui fonctionne, on pointe sur une doc en Français, mais pas sur le bonne version.

Une autre approche, extraction du lien de l'aide en ligne :
[code:1]
Get-Help Get-Content -full|Select-Object -Expand relatedLinks |
Foreach { $_[0].navigationLink[0].LinkText}
#renvoi go.microsoft.com/fwlink/?LinkID=204574
[/code:1]
qui elle pointe sur la version US à jour
[code:1]#http://technet.microsoft.com/library/hh847788.aspx[/code:1]
:S

Si vous trouvez le lien pointant sur la liste de tout les cmdlet, je prends !
[edit]
C'est ici :
Windows PowerShell Core Modules <br><br>Message édité par: Laurent Dardenne, à: 2/10/12 10:10

Tutoriels PowerShell

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

Plus d'informations
il y a 11 ans 5 mois #12874 par Matthew BETTON
Salut Laurent,

Là tu parles des \&quot;PowerShell Core Modules\&quot;... Viens faire un tour ici :P

Et dès que l'on cherche de l'aide pour une Cmdlet, PoSh propose d'exécuter 'Update-Help'.

J'ai donc lancé un Update-Help sur un WS2012 (Actuellement avec les rôles ADDS et DNS) : Vu la longue liste de modules, cela prend quelques minutes.

[code:1]PS C:\Users\administrator&gt; Update-Help
Update-Help : Échec lors de la mise à jour de l'aide du ou des modules «DFSN, DnsServer, NetWNV, RemoteDesktop» avec
la ou les cultures d'interface utilisateur {fr-FR} : La valeur de la clé HelpInfoUri dans le manifeste du module doit
être résolue en une URL de conteneur ou une URL racine sur un site Web où les fichiers d'aide sont stockés. La clé
HelpInfoUri «technet.microsoft.com/library/cc732148.aspx» n'est pas résolue en un conteneur.
Au caractère Ligne:1 : 1
+ Update-Help
+ ~~~~~~~~~~~
+ CategoryInfo : InvalidOperation : (:«») [Update-Help], Exception
+ FullyQualifiedErrorId : InvalidHelpInfoUri,Microsoft.PowerShell.Commands.UpdateHelpCommand

Update-Help : Échec lors de la mise à jour de l'aide du ou des modules «MsDtc» avec la ou les cultures d'interface
utilisateur {fr-FR} : Pour des raisons de sécurité, DTD interdite dans ce document XML. Pour activer le traitement
DTD, définissez sur Parse la propriété DtdProcessing sur XmlReaderSettings et transmettez les paramètres à la méthode
XmlReader.Create.
Au caractère Ligne:1 : 1
+ Update-Help
+ ~~~~~~~~~~~
+ CategoryInfo : InvalidData : (:«») [Update-Help], Exception
+ FullyQualifiedErrorId : HelpInfoXmlValidationFailure,Microsoft.PowerShell.Commands.UpdateHelpCommand[/code:1]

:whistle:

Un exemple, sur 'Disconnect-NFSSession' du module 'NFS' :

[code:1]PS C:\Users\administrator&gt; Get-Help Disconnect-NfsSession

NOM
Disconnect-NfsSession

SYNTAXE
Disconnect-NfsSession [-SessionId] &lt;string[]&gt; [[-ClientId] &lt;uint64[]&gt;] [-CimSession &lt;CimSession[]&gt;]
[-ThrottleLimit &lt;int&gt;] [-AsJob] [-PassThru] [-WhatIf] [-Confirm] [&lt;CommonParameters&gt;]

Disconnect-NfsSession -InputObject &lt;CimInstance#MSFT_NfsSession[]&gt; [-CimSession &lt;CimSession[]&gt;] [-ThrottleLimit
&lt;int&gt;] [-AsJob] [-PassThru] [-WhatIf] [-Confirm] [&lt;CommonParameters&gt;]


ALIAS
Aucun(e)


REMARQUES
Get-Help ne parvient pas à trouver les fichiers d'aide de cette applet de commande sur cet ordinateur. Il ne
trouve qu'une aide partielle.
-- Pour télécharger et installer les fichiers d'aide du module comportant cette applet de commande, utilisez
Update-Help.
-- Pour afficher en ligne la rubrique d'aide de cette applet de commande, tapez : «Get-Help
Disconnect-NfsSession -Online» ou
accédez à go.microsoft.com/fwlink/?LinkID=240182.
[/code:1]

:whistle:

Du coup un petit tour sur l'aide en ligne :

[code:1]Get-Help Disconnect-NfsSession -Online[/code:1]

... qui nous renvoie à cette adresse :laugh:

Je ne sais pas où ils en sont, mais il y a du pain sur la planche !

B)

@+

Matthew

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

Plus d'informations
il y a 11 ans 5 mois #12875 par Laurent Dardenne
Tu as utilisé une version 2012 US ?
Matthew BETTON écrit:

Je ne sais pas où ils en sont

La tête dans le guidon...

Quelques liens :
Windows PowerShell Support for Windows Server 2012

Windows PowerShell Core (3.0)

Windows PowerShell Core Modules

Windows PowerShell About Help Topics

Celle téléchargée, pour Seven en tout cas, ne semble pas à jour...

voir aussi :
technet.microsoft.com/en-us/library/bb978526.aspx

technet.microsoft.com/en-us/library/bb978526.aspx

Message édité par: Laurent Dardenne, à: 8/10/12 10:29

Tutoriels PowerShell

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

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