Question [V3-Fonction]Proxy de Get-Help
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 3 mois #12791
par Laurent Dardenne
Tutoriels PowerShell
[V3-Fonction]Proxy de Get-Help a été créé 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.
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.
- Matthew BETTON
- Hors Ligne
- Membre platinium
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 12 ans 3 mois #12808
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:[V3-Fonction]Proxy de Get-Help
Salut,
Merci Laurent
Merci Laurent
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 3 mois #12813
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[V3-Fonction]Proxy de Get-Help
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 :
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
Je sens qu'on ne pas s'ennuyer avec cette version ...<br><br>Message édité par: Laurent Dardenne, à: 30/09/12 12:40
-
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),
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
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.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 3 mois #12819
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[V3-Fonction]Proxy de Get-Help
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 \"en-US\" { 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]
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
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 \"en-US\" { 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]
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.
- Matthew BETTON
- Hors Ligne
- Membre platinium
Réduire
Plus d'informations
- Messages : 968
- Remerciements reçus 0
il y a 12 ans 3 mois #12874
par Matthew BETTON
Réponse de Matthew BETTON sur le sujet Re:[V3-Fonction]Proxy de Get-Help
Salut Laurent,
Là tu parles des \"PowerShell Core Modules\"... Viens faire un tour ici
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> 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]
Un exemple, sur 'Disconnect-NFSSession' du module 'NFS' :
[code:1]PS C:\Users\administrator> Get-Help Disconnect-NfsSession
NOM
Disconnect-NfsSession
SYNTAXE
Disconnect-NfsSession [-SessionId] <string[]> [[-ClientId] <uint64[]>] [-CimSession <CimSession[]>]
[-ThrottleLimit <int>] [-AsJob] [-PassThru] [-WhatIf] [-Confirm] [<CommonParameters>]
Disconnect-NfsSession -InputObject <CimInstance#MSFT_NfsSession[]> [-CimSession <CimSession[]>] [-ThrottleLimit
<int>] [-AsJob] [-PassThru] [-WhatIf] [-Confirm] [<CommonParameters>]
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]
Du coup un petit tour sur l'aide en ligne :
[code:1]Get-Help Disconnect-NfsSession -Online[/code:1]
... qui nous renvoie à cette adresse
Je ne sais pas où ils en sont, mais il y a du pain sur la planche !
@+
Matthew
Là tu parles des \"PowerShell Core Modules\"... Viens faire un tour ici
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> 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]
Un exemple, sur 'Disconnect-NFSSession' du module 'NFS' :
[code:1]PS C:\Users\administrator> Get-Help Disconnect-NfsSession
NOM
Disconnect-NfsSession
SYNTAXE
Disconnect-NfsSession [-SessionId] <string[]> [[-ClientId] <uint64[]>] [-CimSession <CimSession[]>]
[-ThrottleLimit <int>] [-AsJob] [-PassThru] [-WhatIf] [-Confirm] [<CommonParameters>]
Disconnect-NfsSession -InputObject <CimInstance#MSFT_NfsSession[]> [-CimSession <CimSession[]>] [-ThrottleLimit
<int>] [-AsJob] [-PassThru] [-WhatIf] [-Confirm] [<CommonParameters>]
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]
Du coup un petit tour sur l'aide en ligne :
[code:1]Get-Help Disconnect-NfsSession -Online[/code:1]
... qui nous renvoie à cette adresse
Je ne sais pas où ils en sont, mais il y a du pain sur la planche !
@+
Matthew
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Auteur du sujet
- Hors Ligne
- Modérateur
Réduire
Plus d'informations
- Messages : 6302
- Remerciements reçus 68
il y a 12 ans 3 mois #12875
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:[V3-Fonction]Proxy de Get-Help
Tu as utilisé une version 2012 US ?
Matthew BETTON écrit:
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
Matthew BETTON écrit:
La tête dans le guidon...Je ne sais pas où ils en sont
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.139 secondes
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Contributions à la communauté
- [V3-Fonction]Proxy de Get-Help