Итак, я пытаюсь создать сценарий powershell, который измеряет скорость GPG с использованием файлов разного размера. Конкретная часть, которая вызывает у меня проблемы, заключается в следующем:
1 $temppath="$($env:Temp)\"
...
4 Measure-Command {$bytes= 10000MB
5 [System.Security.Cryptography.RNGCryptoServiceProvider]$rng = New- Object.System.Security.Cryptography.RNGCryptoServiceProvider
6 $rndbytes = New-Object byte[] $bytes
7 [System.Io.File]::WriteAllBytes("$($temppath)\test.txt", $rndbytes)} | Select-Object -OutVariable gentime | Out-Null;
При $bytes >~ 1.5GB
(использую для проверки 10000MB) получаю ошибку, которая, если я правильно понимаю, что происходит, соответствует тому, что байтовый массив индексируется переменной типа int32
. Конкретная ошибка такова:
New-Object : Cannot convert argument "0", with value: "10485760000", for "Byte[]" to type "System.Int32": "Cannot convert value "10485760000" to type "System.Int32". Error: "Value was either too large or too small for an Int32.""
At line:6 char:13
+ $rndbytes = New-Object byte[] $bytes
+ CategoryInfo : InvalidOperation: (:) [New-Object], MethodException
+ FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.PowerShell.Commands.NewObjectCommand
Есть ли способ заставить powershell индексировать $rndbytes при создании объекта с индексом типа int64
или uint64
? Если это не проблема, я бы хотел, чтобы мне показали и объяснили, что именно идет не так.
Обратите внимание, если вы используете, например, $bytes=1000MB
(или пишете $bytes=1GB
), код работает отлично. Я подозреваю, что врежусь в стену на $bytes.index > 2^31 -1
или около того.
Спасибо за помощь~!!
[int]::MaxValue
. Вывод партиями - person Mathias R. Jessen   schedule 09.02.2021[System.Io.File]::WriteAllBytes
данные или добавляет? - person Shinaolord   schedule 09.02.2021