私はこの機能をかなり正しくすることはできません。私はそれをオブジェクトを渡したいとオブジェクトが空の場合、1を返し、それ以外の1空のパイプをパイプすると、1のカウントがあります
によってオブジェクトと増分内の項目を数える「新・テスト」次の関数を仮定:
function New-Test
{
[cmdletbinding()]
Param
(
[Parameter(ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
[object[]]$Object
#[object]$object
)
Begin
{
[email protected]()
}
Process
{
"Total objects: $($object.count)"
if($Object.count -gt 0)
{
$oData += [pscustomobject]@{
Name = $_.Name
Value = $_.Value
}
}
Else
{
Write-Verbose "No existing object to increment. Assuming first entry."
$oData = [pscustomobject]@{Value = 0}
}
}
End
{
$LatestName = ($oData | Sort-Object -Descending -Property Value | Select -First 1).value
[int]$intNum = [convert]::ToInt32($LatestName, 10)
$NextNumber = "{0:00}" -f ($intNum+1)
$NextNumber
}
}
そして、次のテストハッシュテーブル:上記の機能を1として
#Create test hashtable:
$a = 00..08
$obj = @()
$a | foreach-object{
$obj +=[pscustomobject]@{
Name = "TestSting" + "{0:00}" -f $_
Value = "{0:00}" -f $_
}
}
、私は$ OBJのそれを渡した場合、私が取得:
$obj | New-Test -Verbose
Total objects: 1
Total objects: 1
Total objects: 1
Total objects: 1
Total objects: 1
Total objects: 1
Total objects: 1
Total objects: 1
Total objects: 1
09
期待どおりです。しかし、私は$ obj2はそれを渡す場合:
#Create empty hash
$obj2 = $null
$obj2 = @{}
$obj2 | New-Test -Verbose
私が手:$ object.countが1である理由
Total objects: 1
Exception calling "ToInt32" with "2" argument(s): "Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: startIndex"
At line:33 char:9
+ [int]$intNum = [convert]::ToInt32($LatestName, 10)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : ArgumentOutOfRangeException
01
が、私は理解していない、ハッシュテーブルでは何もありませんとき。
私は空のハッシュテーブルテストの結果、[オブジェクト[]]、[オブジェクト]から、パラメータ、$オブジェクトの種類を変更する場合:
私ならば、私は、しかし、期待するものである$obj2 | New-Test -Verbose
Total objects: 0
VERBOSE: No existing object to increment. Assuming first entry.
01
最初のテストを実行すると、結果は次のようになります。
$obj | New-Test -Verbose
Total objects:
VERBOSE: No existing object to increment. Assuming first entry.
Total objects:
VERBOSE: No existing object to increment. Assuming first entry.
今回は$オブジェクトに何も含まれていません。
私はそれが簡単だと確信していますが、私はこのことを理解できません。どんな助けもありがとうございます。
P.S. PowerShell 5.1
$ obj1が初期化されている配列ではなく、$ obj2にハッシュテーブルを割り当てていることがわかりました。 –
あなたはいつも 'measure-object'を使って関数のカウントを直接見ることができます。 'New-Test | Run 'を実行すると、結果は2になります。 Measure-Object'を実行します。 –