例如:
> "a,b,c" -split "," a b c > "a,b,c".split(",") a b c > "a,b,c".length 5 > "a,b,c" -length At line:1 char:9 + "a,b,c" -length + ~~~~~~~ Unexpected token '-length' in expression or statement. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : UnexpectedToken
因此,并非每个方法都可以表示为标志/参数列表。我甚至不确定.split
和-split
是否相同,或者这是偶然的。
我什么时候应该使用标志和方法?如何发现所有可用的标志(对于字符串,数字等
另一件事是ls -?
会返回帮助文字,但"foo" -?
没有。因此,虽然它接受标志,但它并不真正被视为命令
答案 0 :(得分:2)
归结为此。
这......“a,b,c”-length
关于运营商 运算符是可以在命令或表达式中使用的语言元素。 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_operators?view=powershell-5.1 由于有多种运算符类型,因此上述不是单个源文档引用。
对此...“a,b,c”.length
关于方法 描述如何使用方法在PowerShell中对对象执行操作。 方法允许您检查,比较和格式化PowerShell对象的许多属性,执行操作。 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_methods?view=powershell-5.1
从你的例子:
String.Split方法 返回一个字符串数组,该数组包含此实例中由指定字符串或Unicode字符数组的元素分隔的子字符串 https://msdn.microsoft.com/en-us/library/system.string.split(v=vs.110).aspx
关于斯普利特 Split运算符将一个或多个字符串拆分为子字符串。 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_split?view=powershell-5.1
String.Length属性 Length属性返回此实例中Char对象的数量,而不是Unicode字符数。
您会注意到,如果您在PowerShell_ISE.exe或VSCode中打开它,您将立即看到,即使在运行之前,项目4也会立即显示为语法错误。这用红色波浪线表示。那个标记意味着它永远不会起作用,所以没有真正的理由去尝试它。
仅仅因为你可以输入它,并不是正确的。如果您在空格之后键入“ - ”,则会获得预期的列表。好吧,如果你在PowerShel_ISE或Visual Studio代码中。如果您在PowerShell控制台主机中,则必须按Tab键才能在列表中进行选项卡,或使用CRTL +空格键查看完整列表,然后使用选项卡或箭头查看要使用的内容。
('a,b,c').length # this is an array, and this is returning the count of the elements in the array
5
('a,b,c','d,e,f').length # note the element count difference
2
('a,b,c').Length # property use of a .Net class
5
('a,b,c') -length # attempted unknown / invalid switch (PowerShell operator)
要知道你能做什么,不能做什么,或者怎么做,你必须得到它支持的东西。这就是Get-Member的用途。
所以Array允许这个..
('a,b,c') | Get-Member
和... ..
('abc') | Get-Member
Most common listed
Name MemberType Definition
---- ---------- ----------
...
Split Method string[] Split(Params char[] separator), string[] Split(char[] separator, int count), string[] Sp...
...
Substring Method string Substring(int startIndex), string Substring(int startIndex, int length)
...
ToLower Method string ToLower(), string ToLower(cultureinfo culture)
...
ToString Method string ToString(), string ToString(System.IFormatProvider provider), string IConvertible.ToString...
...
ToUpper Method string ToUpper(), string ToUpper(cultureinfo culture)
...
Trim Method string Trim(Params char[] trimChars), string Trim()
TrimEnd Method string TrimEnd(Params char[] trimChars)
TrimStart Method string TrimStart(Params char[] trimChars)
Chars ParameterizedProperty char Chars(int index) {get;}
Length Property int Length {get;}
至于...... 我什么时候应该使用标志和方法? 如何发现所有可用的标志(对于字符串,数字等
您必须阅读您尝试使用的cmdlet上的帮助文件,或者至少是它的示例。
Get-Help -Name Get-ItemProperty -Full
Get-Help -Name Get-ItemProperty -Examples
然后介绍您尝试使用的cmdlet /函数
(Get-Command -Name Get-ItemProperty).Parameters
switches (flags) which will expect a value to the right of it or not, see the property values line below
然后你可以使用cmdlet / function。
Get-ItemProperty -Path D:\Temp | Format-Table -AutoSize -Wrap
Get-ItemProperty -Path D:\Temp | Format-List
Get-ItemProperty -Path D:\Temp | Format-List -Force
Get-ItemProperty -Path D:\Temp | Select-Object -Property * # property values
(Get-ItemProperty -Path D:\Temp) | Get-Member
至于...... 另一件事是ls - ?返回帮助文本,但“foo” - ?没有。 因此,虽然它接受标志,但它并不真正被视为命令
除非您创建了foo函数或模块,否则Foo不是PowerShell中任何内容的有效名称。所以,它应该热回报任何东西。 再一次,仅仅因为你可以输入它,并不能使它正确。
在大多数情况下,如果您正在执行上述操作并且您没有获得自动智能感知,那么您所做的可能是错误的。
查看系统上的所有cmdlet,函数等以供使用。你这样做。
Get-Command