- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
PowerShell 有一个非常好的内置帮助系统,我经常使用它,我可以通过 Get-Help *
查看所有帮助选项。并查询 Cmdlet 或可以使用 Get-Help about_*
查找主题然后说Get-Help about_compar*
打开比较运算符 主题非常好。
但是,我试图找到如何获得各种字符串运算符的帮助,例如 .replace、.compare、.split、.substring。有谁知道如何在 PowerShell 控制台上提取这些主题(可能它们可能隐藏在一些 about_* 主题中,但对我来说在哪里看并不明显或不清楚)?
此外,字符串运算符有 -replace、-compare、-split 变体等,虽然与 .replace 等几乎相同,但一个版本使用正则表达式,另一个不使用。有谁知道是否有帮助主题(同样,可从控制台获得!)澄清所有这些?如果 PowerShell 帮助系统在其内置帮助系统中缺少对所有这些的说明,则会感觉非常缺乏,因为这些是语言中使用非常频繁的部分(所以希望这一切都隐藏在我的一些 about_* 主题中) '还没有找到)。
最佳答案
System.String.Split()
不是 PowerShell 的一部分,而是构建 PowerShell 的 .NET 框架的一部分,因此您必须 请参阅 https://docs.microsoft.com 上的官方文档 .-split
等运算符是 PowerShell 语言功能,并且既要完全发现它们的文档,又要获得集中的、特定于运算符(operator)的信息,目前都很麻烦 .about_*
中包含语言特性(例如运算符)的文档。帮助主题,可以使用 Get-Help -Category HelpFile
定位,您可以将其与传递运算符的(引用的)名称结合起来,以搜索这些主题的内容:Get-Help -Category HelpFile -Name '-replace'
至少缩小搜索范围 ,但仍包括所有提及 -replace
的帮助主题;结果将包括 about_Operators帮助主题,即概览页面 该链接指向更具体的页面,这些页面侧重于特定类别的运算符,例如算术运算符、比较运算符……,但也直接描述了一些通用运算符。 Show-OperatorHelp
和 Show-TypeHelp
.
Show-TypeHelp
, 支持仅限于 .NET 附带的那些(公共(public))类型,因此在 https://docs.microsoft.com 上有文档页面.Show-OperatorHelp
尽可能打开仅描述感兴趣的运算符的特定部分;一些运算符,例如算术运算符 +
, -
, 没有单独的部分,但在这些情况下,整个主题通常足够短,以便于找到感兴趣的部分。-?
和 Get-Help
了解更多关于他们的信息。$PROFILE
例如,文件,或者 - 考虑到它们的长度 - 您可能希望根据它们创建外部脚本 (*.ps1),并将其放置在 $env:Path
中列出的目录中。 .为此,只需剥离 function <name> {
行和最后 }
并将它们保存到 *.ps1
文件。Show-OperatorHelp
:
# Opens the home (overview) page for all PowerShell operators
Show-OperatorHelp
# Lists all operators in the console,
# along with their friendly names and categories.
Show-OperatorHelp -List
# Opens the help topic (section) for the -replace operator.
# Equivalent of
Show-OperatorHelp -Name '-replace'
# because you omit the initial '-'; if you do specify it, quote the entire argument.
Show-OperatorHelp replace
# Opens the help topic (section) for @(...), the array-subexpression operator.
# Note the need for quoting.
Show-OperatorHelp '@()'
Show-TypeHelp
:
# Opens the documentation for the System.String.Split() method.
# You can specify a type name ('string' in this example) as follows:
# * Use a full type name, with the initial 'System.' component optionally omitted (e.g. 'Text.Encoding' for 'System.Text.Encoding'
# * Use a type accelerator such as 'xml' for 'System.Xml.XmlDocument'
# Tab-completion: You can type (part of) a the name of a type
# (last component of the full name) and cycle through loaded types by that name.
# E.g., typing `arrayli` tab-completes to 'System.Collections.ArrayList'.
# Alternatively, *pipe* an instance of a string to the function (see next example).
Show-TypeHelp string split # Short for: Show-TypeHelp -Type string -Member split
# Opens the documentation for the [Microsoft.PowerShell.Commands.MatchInfo]
# type, instances of which Select-String outputs.
'foo' | Select-String o | Show-TypeHelp
我建议从以下 MIT 许可的 Gists 获取源代码而不是 ,因为只有它们会被维护;假设您已经查看了代码(我个人可以向您保证是安全的,但您应该经常检查),您可以
直接安装 :
irm https://gist.github.com/mklement0/146f3202a810a74cb54a2d353ee4003f/raw/Show-OperatorHelp.ps1 | iex
irm https://gist.github.com/mklement0/50a1b101cd53978cd147b4b138fe6ef4/raw/Show-TypeHelp.ps1 | iex
Show-OperatorHelp
源代码:
function Show-OperatorHelp {
<#
.SYNOPSIS
Shows documentation for PowerShell's operators.
.DESCRIPTION
Navigates to operator-specific or -related online help topics in your default
web browser.
Invoke argument-less to see the operators overview help topic.
-Precedence shows the topic about operator precedence.
-QuotingRules shows the topic about string literals and quoting.
-Name <name> targets a specific operator.
.PARAMETER Name
The name of an operator.
Note that most names must be passed *in quotes* for syntactic reasons;
e.g., '-match' instead of -match
However, you may omit the initial '-', in which case you needn't quote.
Use -List to see all names.
.PARAMETER Precedence
Opens the help topic that describes operator precedence.
.PARAMETER List
Parameter description
.PARAMETER QuotingRules
Opens the help topic that describes the quoting rules and syntax for
string literals.
.PARAMETER CopyUrl
Instead of opening the topic page in a browser, copies the page's URL to
the clipboard.
.PARAMETER Version
Specify a specific PowerShell version number (e.g., 7 or 5.1) for which to
display the requested help topic.
By default, the executing engine's version number is used.
.EXAMPLE
Show-OperatorHelp
Opens the home (overview) page for all PowerShell operators.
.EXAMPLE
Show-OperatorHelp replace
Opens the help topic (section) for the -replace operator.
Equivalent of: Show-OperatorHelp -Name '-replace'
.EXAMPLE
Show-OperatorHelp -List
Lists all operators, along with their friendly names and categories.
.EXAMPLE
Show-OperatorHelp -Precedence
Shows the help topic about operator precedence.
#>
[CmdletBinding(DefaultParameterSetName = 'HomePage', SupportsShouldProcess, PositionalBinding = $false)]
param (
[Parameter(ParameterSetName = 'Name', Mandatory, Position = 0)]
[string] $Name
,
[Parameter(ParameterSetName = 'Precedence')]
[switch] $Precedence
,
[Parameter(ParameterSetName = 'List')]
[Alias('ListAvailable')]
[switch] $List
,
[Parameter(ParameterSetName = 'QuotingRules')]
[Alias('StringLiterals')]
[switch] $QuotingRules
,
[Parameter(ParameterSetName = 'Name')]
[Parameter(ParameterSetName = 'Precedence')]
[Parameter(ParameterSetName = 'QuotingRules')]
[Parameter(ParameterSetName = 'HomePage')]
[Alias('cp')]
[switch] $CopyUrl
,
[Parameter(ParameterSetName = 'Name')]
[Parameter(ParameterSetName = 'Precedence')]
[Parameter(ParameterSetName = 'QuotingRules')]
[Parameter(ParameterSetName = 'HomePage')]
[string] $Version # PowerShell version
)
# Default to the executing PowerShell engine's version.
# Note: If no "?view=powershell-<ver>" query string is present,
# the currently highest stable version overall is targeted.
if ($Version) {
$verObj = $Version -as [version]
if (-not $verObj) { $verObj = "$Version.0" -as [version] }
if (-not $verObj) { Throw "Unrecognized PowerShell version number: $Version" }
}
else {
$verObj = $PSVersionTable.PSVersion
}
$Version = ('{0}.{1}' -f $verObj.Major, $verObj.Minor) -replace '\.0$'
$opTable = @{
# about_Arithmetic_Operators
'-' = [pscustomobject] @{ Name = '-'; FriendlyName = 'subtraction / sign inversion'; Topic = 'about_Arithmetic_Operators'; Category = 'Arithmetic' }
'*' = [pscustomobject] @{ Name = '*'; FriendlyName = 'multiplication / string replication'; Topic = 'about_Arithmetic_Operators'; Category = 'Arithmetic' }
'/' = [pscustomobject] @{ Name = '/'; FriendlyName = 'division'; Topic = 'about_Arithmetic_Operators'; Category = 'Arithmetic' }
'%' = [pscustomobject] @{ Name = '%'; FriendlyName = 'modulus'; Topic = 'about_Arithmetic_Operators'; Category = 'Arithmetic' }
'+' = [pscustomobject] @{ Name = '+'; FriendlyName = 'addition / string conatenation'; Topic = 'about_Arithmetic_Operators'; Category = 'Arithmetic' }
'-band' = [pscustomobject] @{ Name = '-band'; FriendlyName = 'bitwise AND'; Topic = 'about_Arithmetic_Operators'; Category = 'Bitwise' }
'-bor' = [pscustomobject] @{ Name = '-bor'; FriendlyName = 'bitwise OR'; Topic = 'about_Arithmetic_Operators'; Category = 'Bitwise' }
'-bxor' = [pscustomobject] @{ Name = '-bxor'; FriendlyName = 'bitwise XOR'; Topic = 'about_Arithmetic_Operators'; Category = 'Bitwise' }
'-bNot' = [pscustomobject] @{ Name = '-bNot'; FriendlyName = 'bitwise complement'; Topic = 'about_Arithmetic_Operators'; Category = 'Bitwise' }
# about_Assignment_Operators
'=' = [pscustomobject] @{ Name = '='; FriendlyName = 'assignment'; Topic = 'about_Assignment_Operators'; Category = 'Assignment' }
'+=' = [pscustomobject] @{ Name = '+='; FriendlyName = 'compound assignment'; Topic = 'about_Assignment_Operators'; Category = 'Assignment' }
'-=' = [pscustomobject] @{ Name = '-='; FriendlyName = 'compound assignment'; Topic = 'about_Assignment_Operators'; Category = 'Assignment' }
'*=' = [pscustomobject] @{ Name = '*='; FriendlyName = 'compound assignment'; Topic = 'about_Assignment_Operators'; Category = 'Assignment' }
'/=' = [pscustomobject] @{ Name = '/='; FriendlyName = 'compound assignment'; Topic = 'about_Assignment_Operators'; Category = 'Assignment' }
'%=' = [pscustomobject] @{ Name = '%='; FriendlyName = 'compound assignment'; Topic = 'about_Assignment_Operators'; Category = 'Assignment' }
'++' = [pscustomobject] @{ Name = '++'; FriendlyName = 'increment'; Topic = 'about_Assignment_Operators'; Category = 'Assignment' }
'--' = [pscustomobject] @{ Name = '--'; FriendlyName = 'decrement'; Topic = 'about_Assignment_Operators'; Category = 'Assignment' }
# about_Comparison_Operators
'-eq' = [pscustomobject] @{ Name = '-eq'; FriendlyName = 'equality'; Topic = 'about_Comparison_Operators'; Anchor = '-eq'; Category = 'Equality' }
'-ne' = [pscustomobject] @{ Name = '-ne'; FriendlyName = 'inequality'; Topic = 'about_Comparison_Operators'; Anchor = '-ne'; Category = 'Equality' }
'-gt' = [pscustomobject] @{ Name = '-gt'; FriendlyName = 'greater-than'; Topic = 'about_Comparison_Operators'; Anchor = '-gt'; Category = 'Equality' }
'-ge' = [pscustomobject] @{ Name = '-ge'; FriendlyName = 'greater-than-or-equal'; Topic = 'about_Comparison_Operators'; Anchor = '-gt'; Category = 'Equality' }
'-lt' = [pscustomobject] @{ Name = '-lt'; FriendlyName = 'less-than'; Topic = 'about_Comparison_Operators'; Anchor = '-lt'; Category = 'Equality' }
'-le' = [pscustomobject] @{ Name = '-le'; FriendlyName = 'less-than-or-equal'; Topic = 'about_Comparison_Operators'; Anchor = '-le'; Category = 'Equality' }
'-like' = [pscustomobject] @{ Name = '-like'; FriendlyName = 'wildcard matching'; Topic = 'about_Comparison_Operators'; Anchor = '-like'; Category = 'Matching' }
'-notlike' = [pscustomobject] @{ Name = '-notlike'; FriendlyName = 'negated wildcard matching'; Topic = 'about_Comparison_Operators'; Anchor = '-notlike'; Category = 'Matching' }
'-match' = [pscustomobject] @{ Name = '-match'; FriendlyName = 'regular-expression matching'; Topic = 'about_Comparison_Operators'; Anchor = '-match'; Category = 'Matching' }
'-notmatch' = [pscustomobject] @{ Name = '-notmatch'; FriendlyName = 'negated regular-expression matching'; Topic = 'about_Comparison_Operators'; Anchor = '-notmatch'; Category = 'Matching' }
'-replace' = [pscustomobject] @{ Name = '-replace'; FriendlyName = 'regular-expression-based string replacement'; Topic = 'about_Comparison_Operators'; Anchor = 'replacement-operator'; Category = 'String' }
'-in' = [pscustomobject] @{ Name = '-in'; FriendlyName = 'LHS contained in RHS'; Topic = 'about_Comparison_Operators'; Anchor = '-in'; Category = 'Containment' }
'-notIn' = [pscustomobject] @{ Name = '-notIn'; FriendlyName = 'LHS not contained in collection'; Topic = 'about_Comparison_Operators'; Anchor = '-notin'; Category = 'Containment' }
'-contains' = [pscustomobject] @{ Name = '-contains'; FriendlyName = 'collection contains RHS'; Topic = 'about_Comparison_Operators'; Anchor = '-contains'; Category = 'Containment' }
'-notContains' = [pscustomobject] @{ Name = '-notContains'; FriendlyName = 'collection doesn''t contain RHS'; Topic = 'about_Comparison_Operators'; Anchor = '-notcontains'; Category = 'Containment' }
# about_Join
'-join' = [pscustomobject] @{ Name = '-join'; FriendlyName = 'string joining'; Topic = 'about_Join'; Category = 'String' }
# about_Split
'-split' = [pscustomobject] @{ Name = '-split'; FriendlyName = 'string splitting'; Topic = 'about_Split'; Category = 'String' }
# about_Logical_Operators
'-not' = [pscustomobject] @{ Name = '-not'; FriendlyName = 'logical NOT'; Topic = 'about_Logical_Operators'; Category = 'Logical' }
'!' = [pscustomobject] @{ Name = '!'; FriendlyName = 'logical NOT'; Topic = 'about_Logical_Operators'; Category = 'Logical' }
'-and' = [pscustomobject] @{ Name = '-and'; FriendlyName = 'logical AND'; Topic = 'about_Logical_Operators'; Category = 'Logical' }
'-or' = [pscustomobject] @{ Name = '-or'; FriendlyName = 'logical OR'; Topic = 'about_Logical_Operators'; Category = 'Logical' }
'-xor' = [pscustomobject] @{ Name = '-xor'; FriendlyName = 'logical XOR'; Topic = 'about_Logical_Operators'; Category = 'Logical' }
# about_Operators
'$()' = [pscustomobject] @{ Name = '$()'; FriendlyName = 'subexpression'; Topic = 'about_Operators'; Anchor = 'subexpression-operator--'; Category = 'Evaluation' }
'@()' = [pscustomobject] @{ Name = '@()'; FriendlyName = 'array-subexpression'; Topic = 'about_Operators'; Anchor = 'array-subexpression-operator--'; Category = 'Evaluation' }
'()' = [pscustomobject] @{ Name = '()'; FriendlyName = 'grouping'; Topic = 'about_Operators'; Anchor = 'grouping-operator--'; Category = 'Evaluation' }
'. ' = [pscustomobject] @{ Name = '.'; FriendlyName = '(dot-)source'; Topic = 'about_Operators'; Anchor = 'dot-sourcing-operator-'; Category = 'Execution' } # Sadly, we have to use '. ' to distinguish it from the member-access operator
'&' = [pscustomobject] @{ Name = '&'; FriendlyName = 'call (execute)'; Topic = 'about_Operators'; Anchor = 'call-operator-'; Category = 'Execution' }
' &' = [pscustomobject] @{ Name = '&'; FriendlyName = 'background'; Topic = 'about_Operators'; Anchor = 'background-operator-'; Category = 'Execution' } # Sadly, we have to use ' &' to distinguish it from the call operator
'&&' = [pscustomobject] @{ Name = '&&'; FriendlyName = 'pipeline-chain AND'; Topic = 'about_Pipeline_Chain_Operators'; Category = 'Pipeline' }
'||' = [pscustomobject] @{ Name = '||'; FriendlyName = 'pipeline-chain OR'; Topic = 'about_Pipeline_Chain_Operators'; Category = 'Pipeline' }
'|' = [pscustomobject] @{ Name = '|'; FriendlyName = 'pipeline'; Topic = 'about_Operators'; Anchor = 'pipeline-operator-'; Category = 'Pipeline' }
'.' = [pscustomobject] @{ Name = '.'; FriendlyName = 'member access'; Topic = 'about_Operators'; Anchor = 'member-access-operator-'; Category = 'Object' }
'::' = [pscustomobject] @{ Name = '::'; FriendlyName = 'static member access'; Topic = 'about_Operators'; Anchor = 'static-member-operator-'; Category = 'Object' }
'[0]' = [pscustomobject] @{ Name = '[0]'; FriendlyName = 'index'; Topic = 'about_Operators'; Anchor = 'index-operator--'; Category = 'Object' }
'[int]' = [pscustomobject] @{ Name = '[int]'; FriendlyName = 'cast / type constraint'; Topic = 'about_Operators'; Anchor = 'cast-operator--'; Category = 'Type' }
',' = [pscustomobject] @{ Name = ','; FriendlyName = 'array constructor'; Topic = 'about_Operators'; Anchor = 'comma-operator-'; Category = 'Array' }
'..' = [pscustomobject] @{ Name = '..'; FriendlyName = 'range (numbers/characters) '; Topic = 'about_Operators'; Anchor = 'range-operator-'; Category = 'Array' }
'-f' = [pscustomobject] @{ Name = '-f'; FriendlyName = 'format (strings)'; Topic = 'about_Operators'; Anchor = 'format-operator--f'; Category = 'String' }
'?:' = [pscustomobject] @{ Name = '?:'; FriendlyName = 'ternary conditional'; Topic = 'about_Operators'; Anchor = 'ternary-operator--if-true--if-false'; Category = 'Conditional' }
'??' = [pscustomobject] @{ Name = '??'; FriendlyName = 'null-coalescing'; Topic = 'about_Operators'; Anchor = ''; Category = 'Conditional' } # ?? Not yet covered in the v7 topic as of 12 Dec 2019
# about_Redirection
'>' = [pscustomobject] @{ Name = '>'; FriendlyName = 'redirection'; Topic = 'about_Redirection'; Category = 'Stream' }
'>>' = [pscustomobject] @{ Name = '>>'; FriendlyName = 'appending redirection'; Topic = 'about_Redirection'; Category = 'Stream' }
# about_Type_Operators
'-is' = [pscustomobject] @{ Name = '-is'; FriendlyName = 'type(-inheritance) / interface test'; Topic = 'about_Type_Operators'; Category = 'Type' }
'-isnot' = [pscustomobject] @{ Name = '-isnot'; FriendlyName = 'negated type(-inheritance) / interface test'; Topic = 'about_Type_Operators'; Category = 'Type' }
'-as' = [pscustomobject] @{ Name = '-as'; FriendlyName = 'conditional type conversion'; Topic = 'about_Type_Operators'; Category = 'Type' }
# --- Not covered by an operator help topic, but could be considered one.
# about_Splatting
'@' = [pscustomobject] @{ Name = '@'; FriendlyName = 'splatting (arguments)'; Topic = 'about_Splatting'; Category = 'Splatting' }
}
# As a courtesy, interpret variations of quotes / quoting styles passed as -Name as if -Quoting had been passed instead.
$parameterSetNameInEffect = $PSCmdlet.ParameterSetName
if ($Name -replace '\s' -match '^(?:''''?|""?|@''(''@)?|@"("@)?)$') {
$parameterSetNameInEffect = 'QuotingRules'
}
$url = ''
switch ($parameterSetNameInEffect) {
'Name' {
$warning = ''
# See if the name matches an entry as-is.
$entry = $opTable[$Name]
# If '.' was passed, warn about member-access / dot-sourcing ambiguity.
if ($Name -eq '.') {
$warning = "Defaulting to member-access operator; for the dot-sourcing operator, pass '. '"
}
elseif ($Name -eq '&') {
$warning = "Defaulting to call operator; for the background operator, pass ' &'"
}
elseif ($Name.Trim() -eq '@') {
$warning = "Defaulting to splatting operator; for the array-subexpression operator, pass '@()'; for here-strings, pass '@`"`"@' or -QuotingRules"
}
elseif (-not $entry) {
# Remove any spaces, to support name variations such as '( )', '[ ]'
$normalizedName = $Name -replace ' '
}
if (-not $entry) {
# If not, try prepending "-", to allow users to specify 'replace' instead of '-replace', for instance.
$entry = $opTable["-$normalizedName"]
}
if (-not $entry) {
# Variations of redirection operators.
if ($entry -match '^[\d*]?>>?(&\d?)') {
$entry = $opTable['>']
}
}
if (-not $entry) {
# Map case variants to their unqualified form; e.g. '-ireplace' -> '-replace'
$baseName = $normalizedName -replace '^(?=-?)[ci](?=[a-z])'
if ($baseName -ne $normalizedName) {
if ($baseName -notlike '-*') { $baseName = '-' + $baseName }
$entry = $opTable[$baseName]
}
}
if (-not $entry -and $normalizedName -like '`[*`]') {
# varations of referring to the index / cast / type-constraint operator
$bracketName = $normalizedName
if ($bracketName -eq '[]') {
$bracketName = '[0]' # default to indexer, but warn
$warning = "Defaulting to index operator; for the cast / type-constraint operators, pass '[int]'"
}
elseif ($bracketName -match '^\[(\d+|[''"].*[''"])\]$') {
$bracketName = '[0]' # indexer - numeric or string
}
else {
$bracketName = '[int]' # cast
}
$entry = $opTable[$bracketName]
}
if (-not $entry) {
Throw "Not a recognized operator: $Name"
}
elseif ($warning) {
Write-Warning $warning
}
$url = "https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/" + $entry.Topic
if ($entry.Anchor) {
$url += '#' + $entry.Anchor
}
break
}
'Precedence' {
$url = 'https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Operator_Precedence'
break
}
'QuotingRules' {
$url = 'https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Quoting_Rules'
break
}
'HomePage' {
$url = 'https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_Operators'
break
}
'List' {
# List the operators table below.
}
Default { Throw "What are you doing here?" }
}
if ($url -and $Version) {
$versionQueryString = '?view=powershell-' + $Version
if ($url.Contains('#')) {
$url = $url -replace '(#.+)$', ($versionQueryString + '$1')
}
else {
$url += $versionQueryString
}
}
# -WhatIf support.
if (-not $PSCmdlet.ShouldProcess((("`n" + $url + "`n"), "List all operators")[$parameterSetNameInEffect -eq 'List'])) { return }
if ($parameterSetNameInEffect -eq 'List') {
$opTable.Values | Select-Object Name, FriendlyName, Category | Sort-Object Category, Name
}
else {
if ($CopyUrl) {
Write-Verbose "Copying URL to clipboard: $url"
Set-Clipboard $url
}
else {
Write-Verbose "Navigating to: $url"
Start-Process $url
}
}
}
Show-TypeHelp
源代码:
function Show-TypeHelp {
<#
.SYNOPSIS
Shows documentation for built-in .NET types.
.DESCRIPTION
Navigates to the specified .NET type's docs.microsoft.com documentation page
in your default web browser, assuming the type comes with .NET.
Use -WhatIf to preview the URL that would be opened.
There are two basic invocation patterns:
* Provide the full name of a type a type accelerator or a [type] instance
via the -Type parameter.
* Tab-completion works with the (prefixes of) a type's simple name (without
namespace component); e.g., Get-TypeHelp List<tab> cycles through all
loaded types whose name is or starts with 'List'.
* Pipe instance(s) of the type of interest.
.PARAMETER Type
Can be the name of a type (e.g. "string"), or a type literal (e.g. [string]).
If given a name, the name must be one of the following:
* The type's full name; e.g., 'System.Xml.XmlDocument'.
* The full name with the 'System.' prefix omitted; e.g., 'Xml.XmlDocument'
* The name of a PowerShell type accelerator; e.g., 'xml'
.PARAMETER Member
The optional name of a property or method to get specific information on.
If the target type has no such member, a warning is issued, and you're taken
to the type's home page.
.PARAMETER InputObject
Object(s), typically provided via the pipeline, whose type's documentation
page should be opened.
.PARAMETER Platform
The target .NET platform / standard, which must include a specific major.minor
version number; e.g., 'dotnetcore-3.1'.
Currently (v7.0), the latest 'netframework-*' version is targeted by default, i.e.,
the Windows-only .NET Framework (FullCLR).
Use tab completion to cycle through the available platforms, but note that
you must complete the specific version number yourself.
.EXAMPLE
Get-TypeHelp xml
Opens the documentation page for type [xml], i.e., for System.Xml.XmlDocument
.EXAMPLE
Get-TypeHelp string split
Opens the documentation page for the System.String type's Split() method.
.EXAMPLE
Get-Item / | Get-TypeHelp
Opens the documentation page for type System.IO.DirectoryInfo, an instance
of which is output by the Get-Item command.
.EXAMPLE
Get-TypeHelp regex -Platform netcore-3.1
Opens the documenation page for type System.Text.RegularExpressions.Regex
for the .NET Core 3.1 platform.
#>
[CmdletBinding(DefaultParameterSetName = 'ByType', SupportsShouldProcess = $true)]
[OutputType()] # No output.
param(
[Parameter(ParameterSetName = 'ByType', Mandatory, Position = 0)]
[ArgumentCompleter( {
param($cmd, $param, $wordToComplete)
# Remove enclosing / opening quote(s), if present.
$wordToComplete = $wordToComplete -replace '^[''"]|[''"]$'
if ($tp = $wordToComplete -as [Type]) {
# Already a full type name or the name of a type accelerator such as [xml]
$tp.FullName
}
else {
# Get the full names of all public types (including nested ones), but exclude dynamic assemblies.
# (Dynamic assemblies can't be expected to have documentation pages anyway; also, not excluding them would break the .GetExportedTypes() call.)
$allLoadedTypes = [System.AppDomain]::CurrentDomain.GetAssemblies().Where( { -not $_.IsDynamic }).GetExportedTypes().FullName
# Prefix-name-only-match against all loaded full type names from non-dynamic assemblies at
# and enclose in embedded '...' if the type name contains a ` char. (generics), then sort.
$(foreach ($match in $allLoadedTypes -match "[+.]$wordToComplete[^.]*$") {
($match, "'$match'")[$match -match '`']
}) | Sort-Object
}
})]
[Type] $Type
,
[Parameter(ParameterSetName = 'ByType', Position = 1)]
[string] $Member
,
[Parameter(ParameterSetName = 'ByInstance', ValueFromPipeline, Mandatory)]
[ValidateNotNullOrEmpty()]
$InputObject
,
[ArgumentCompleter( {
'netcore-', 'netframework-', 'xamarinmac-', 'dotnet-plat-ext-', 'netstandard-', 'dotnet-uwp-', 'xamarinandroid-', 'xamarinios-10.8', 'xamarinmac-' -like "$wordToComplete*"
})]
[string] $Platform
,
[Alias('cp')]
[switch] $CopyUrl
)
begin {
$types = [System.Collections.Generic.List[Type]]::new()
$instances = [System.Collections.Generic.List[object]]::new()
if ($Platform -and $Platform -notmatch '^[a-z][a-z-]+-\d+\.\d+$') {
Throw "The -Platform value must be in the form '<platform-id>-<major>.<minor>'; e.g., 'netcore-3.1'; use tab completion to cycle through the supported platforms and add a version number."
}
}
process {
switch ($PSCmdlet.ParameterSetName) {
'ByType' { $types.Add($Type) }
'ByInstance' { $instances.Add($InputObject) }
Default { Throw 'What are you doing here?' }
}
}
end {
# If instances were given, determine their types now.
if ($PSCmdlet.ParameterSetName -eq 'ByInstance') {
$types = $instances.ToArray().ForEach('GetType') | Select-Object -Unique
}
$urls = foreach ($tp in $types) {
# Make sure that the member exists, otherwise a 404 happens.
if ($Member -and $tp.GetMembers().Name -notcontains $Member) {
Write-Warning "Ignoring member name '$Member', because type '$tp' has no such member."
$Member = ''
}
# Transform the full type name to the format used in the URLs.
# '`1' -> '-1'
# System.Environment+SpecialFolder -> 'System.Environment.SpecialFolder'
$typeNameForUrl = $tp.FullName -replace '`', '-' -replace '\+', '.'
"https://docs.microsoft.com/$PSCulture/dotnet/api/$typeNameForUrl" + ('', ".$Member")[$Member -ne ''] + ('', "?view=$Platform")[[bool] $Platform]
}
if ($PSCmdlet.ShouldProcess("`n" + ($urls -join "`n") + "`n")) {
if ($CopyUrl) {
Write-Verbose "Copying URL(s) to clipboard: $urls"
Set-Clipboard $urls
}
else {
Write-Verbose "Navigating to: $urls"
Start-Process $urls
}
}
}
}
关于string - .trim/-trim、.replace/-replace、.split/-split 和其他字符串运算符的获取帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59212258/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!