PowerShell中缺少成员方法
我有(又一个)PowerShell查询。我在PowerShell中有一个数组,我需要使用remove()和split命令。PowerShell中缺少成员方法
通常你设置一个数组(或变量),并存在上述方法。在下面的$ csv2数组中,两个方法都缺失,我使用get-member cmd进行了检查。
我该如何去使用删除来摆脱nan的线条。另外我如何将列分成两个不同的变量。此刻数组中的每个元素都显示一行,对于每行我需要将其转换为两个变量,每列一个。
时间戳利用
--------- -----------
1276505880 2.0763250000e + 00
1276505890 1.7487730000e + 00
1276505900 1.6906890000e + 00
1276505910 1.7972880000e + 00
1276505920 1.8141900000e + 00
1276505930楠
1276505940楠
1276505950 0.0000000000e + 00
$SystemStats = (Get-F5.iControl).SystemStatistics
$report = "c:\snmp\data" + $gObj + ".csv"
### Allocate a new Query Object and add the inputs needed
$Query = New-Object -TypeName iControl.SystemStatisticsPerformanceStatisticQuery
$Query.object_name = $i
$Query.start_time = $startTime
$Query.end_time = 0
$Query.interval = $interval
$Query.maximum_rows = 0
### Make method call passing in an array of size one with the specified query
$ReportData = $SystemStats.get_performance_graph_csv_statistics((,$Query))
### Allocate a new encoder and turn the byte array into a string
$ASCII = New-Object -TypeName System.Text.ASCIIEncoding
$csvdata = $ASCII.GetString($ReportData[0].statistic_data)
$csv2 = convertFrom-CSV $csvdata
$csv2
有基于.NET的Array
类型没有Remove
或Split
方法,或者通过围绕Array
实例PowerShell的包装增加。这很容易显示:
PS[64bit] E:\> $a = 1,2,3,4,5 PS[64bit] E:\> $a.GetType() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array PS[64bit] E:\> Get-Member -InputObject $a TypeName: System.Object[] Name MemberType Definition ---- ---------- ---------- Count AliasProperty Count = Length Address Method System.Object&, mscorlib, Version=2.0.0.0, Culture=neutral, PublicK... Clone Method System.Object Clone() CopyTo Method System.Void CopyTo(array array, int index), System.Void CopyTo(arra... Equals Method bool Equals(System.Object obj) Get Method System.Object Get(int) GetEnumerator Method System.Collections.IEnumerator GetEnumerator() GetHashCode Method int GetHashCode() GetLength Method int GetLength(int dimension) GetLongLength Method long GetLongLength(int dimension) GetLowerBound Method int GetLowerBound(int dimension) GetType Method type GetType() GetUpperBound Method int GetUpperBound(int dimension) GetValue Method System.Object GetValue(Params int[] indices), System.Object GetValu... Initialize Method System.Void Initialize() Set Method System.Void Set(int , System.Object) SetValue Method System.Void SetValue(System.Object value, int index), System.Void S... ToString Method string ToString() IsFixedSize Property System.Boolean IsFixedSize {get;} IsReadOnly Property System.Boolean IsReadOnly {get;} IsSynchronized Property System.Boolean IsSynchronized {get;} Length Property System.Int32 Length {get;} LongLength Property System.Int64 LongLength {get;} Rank Property System.Int32 Rank {get;}
.NET和PowerShell中的数组是固定大小。要删除您需要复制所有,但该元素被删除的元素,在PSH这可以用Where-Object
做到:
$newArray = $oldArray | Where-Object {some-condition-on-$_}
同样Select-Object
与-First
和-Skip
参数可以用来选择之前或之后的元素(resp3ectively )索引。
NBSystem.Array
并实现System.Collections.ILst
但明确的实施IList.Remove
只是抛出一个NotImplementedException
。
非常感谢你,让它工作。我读过Arraylists的教程,并没有意识到有什么区别 – Andrew 2010-06-14 10:34:34
@Andrew:的确,ArrayList和Array是完全不同的类型。 'ArrayList'更灵活,但有更多的开销,在应用程序中这可能很重要,但在脚本中不太可能。但是,PSH中的所有内置收集操作都会创建数组。 – Richard 2010-06-14 14:48:15