В PowerShell, как я могу определить, является ли текущий диск сетевым диском или нет?

Вот алгоритм, который я бы использовал для выполнения этой задачи:

  1. Генерация одного случайного числа в диапазоне от 120 до 235. Это будет окончательная сумма.
  2. Генерация шести случайных чисел в диапазоне от 0,0 до 1,0.
  3. Нормализуйте эти шесть чисел, то есть разделите каждое на сумму всех шести.
  4. Умножьте каждое из шести нормированных чисел на исходное случайное число.
  5. Округлите каждый из шести результатов.

Теперь у вас есть шесть случайных чисел с суммой в нужном диапазоне. Возможно, вам просто нужно добавить или вычесть 1 к одному из значений в случае, если при округлении сумма вышла за пределы диапазона. Вы можете выбрать одно из случайных чисел для настройки.

'Create a random number generator.
Dim rng As New Random

'Create a random number in the desired range for the final sum.
Dim sum = rng.Next(120, 235 + 1)

'Generate six proportional values as fractions of 1.0.
Dim proportions = Enumerable.Range(1, 6).Select(Function(n) rng.NextDouble()).ToArray()

'Get the sum of all the proportional values.
Dim proportionsSum = proportions.Sum()

'Normalise the proportional values so that they sum to 1.0
proportions = Array.ConvertAll(proportions, Function(r) r / proportionsSum)

'Break the final sum up into the specified proportions.
Dim numbers = Array.ConvertAll(proportions, Function(r) CInt(Math.Round(r * sum)))

'Adjust as required if rounding has pushed the sum below the minimum value.
Do While numbers.Sum() < 120
    'Get a random element index.
    Dim index = rng.Next(0, numbers.Length)

    'Increment the element at that index.
    numbers(index) = numbers(index) + 1
Loop

'Adjust as required if rounding has pushed the sum above the maximum value.
Do While numbers.Sum() > 235
    'Get a random element index.
    Dim index = rng.Next(0, numbers.Length)

    'Decrement the element at that index.
    numbers(index) = numbers(index) - 1
Loop

'The numbers array now contains six random values with a sum in the range 120 to 235.
7
задан Community 23 May 2017 в 12:08
поделиться

6 ответов

Используйте платформу.NET:

PS H:\> $x = new-object system.io.driveinfo("h:\")
PS H:\> $x.drivetype
Network
10
ответ дан 6 December 2019 в 14:11
поделиться

Попытка WMI:

Get-WMI -query "Select ProviderName From Win32_LogicalDisk Where DeviceID='H:'"
1
ответ дан 6 December 2019 в 14:11
поделиться

Немного более компактная вариация на принятый ответ:

[System.IO.DriveInfo]("C")
1
ответ дан 6 December 2019 в 14:11
поделиться

Альтернативный способ использовать WMI:

get-wmiobject Win32_LogicalDisk | ? {$_.deviceid -eq "s:"} | % {$_.providername}

Получите все сетевые диски с:

get-wmiobject Win32_LogicalDisk | ? {$_.drivetype -eq 4} | % {$_.providername}

1
ответ дан 6 December 2019 в 14:11
поделиться

Возьмите это шаг вперед как показано ниже:

([System.IO.DriveInfo]("C")).Drivetype

Обратите внимание, что это только работает на локальная система. Используйте WMI для удаленных компьютеров.

1
ответ дан 6 December 2019 в 14:11
поделиться

Самый надежный путь состоит в том, чтобы использовать WMI

get-wmiobject win32_volume | ? { $_.DriveType -eq 4 } | % { get-psdrive $_.DriveLetter[0] } 

DriveType является перечислимым остроумием hthe после значений

0 - Неизвестный 1 - никакой корневой каталог 2 - съемный диск 3 - локальный диск 4 - сетевой диск 5 - компакт-диск 6 - псевдодиск

Вот ссылка на сообщение в блоге, которое я сделал на предмете

1
ответ дан 6 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: