в PowerShell отсутствуют методы-члены в массиве - PullRequest
0 голосов
/ 14 июня 2010

У меня есть (еще один) запрос PowerShell.У меня есть массив в powershell, который мне нужно использовать команды remove () и split.

Обычно вы устанавливаете массив (или переменную), и вышеуказанные методы существуют.В приведенном ниже массиве $ csv2 оба метода отсутствуют, я проверил с помощью команды get-member.

Как я могу использовать удаление, чтобы избавиться от линий с нан.Также, как я могу разделить столбцы на две разные переменные.в настоящий момент каждый элемент массива отображает одну строку, для каждой строки мне нужно преобразовать ее в две переменные, по одной для каждого столбца.

Использование метки времени
--------- -----------
1276505880 2.0763250000e + 00
1276505890 1.7487730000e + 00
1276505900 1.6906890000e + 00
1276505910 1.7972880000e + 00
1276505920 1.8141900000e + 00
1276505930 nan
1276505940 nan
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

1 Ответ

3 голосов
/ 14 июня 2010

Нет метода Remove или Split для типа .NET Array, или он не добавлен оболочкой PowerShell вокруг экземпляра Array. Это довольно легко показать:

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 можно использовать для выбора элементов до или после (соответственно) индекса.


NB System.Array реализует System.Collections.ILst, но явная реализация IList.Remove просто выдает NotImplementedException.

...