Соответствие PowerShell, содержит не работает с общими сетевыми путями - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь идентифицировать имя диска сопоставленного сетевого ресурса с помощью Root, например

\\ SERVER05 \ DIR $

Это просто не работает:

Get-PSDrive | Where-Object {$_.Root -like "SERVER05" }

пробовал с -match, -contains и ничего

Есть идеи?

1 Ответ

0 голосов
/ 08 февраля 2019

Проблема здесь одна из этих проблем PowerShell.Свойства по умолчанию, возвращаемые для PSDrives: Имя, Описание, Поставщик, Корень и Текущее местоположение.Давайте посмотрим на мой диск M, например:

Get-PSDrive -Name M

Name           Used (GB)     Free (GB) Provider      Root                                                                               CurrentLocation
----           ---------     --------- --------      ----                                                                               ---------------
M                 769.66        112.47 FileSystem    \\s5000\Computer Srv\Matt                                                                         

Проблема, с которой вы столкнулись, заключается в том, что при отображении имени Root при отправке его в выходной поток по умолчанию вы фактически смотрите значение DisplayRoot.Это вводит в заблуждение, но информация, которую вы хотите, все еще там.

Get-PSDrive -Name M | Format-List *

Used            : 826416230400
Free            : 120764563456
CurrentLocation : 
Name            : M
Provider        : Microsoft.PowerShell.Core\FileSystem
Root            : M:\
Description     : 
Credential      : System.Management.Automation.PSCredential
DisplayRoot     : \\s5000\Computer Srv\Matt

Это нечто закулисное с форматированием XML-файлов PowerShell.В частности, это происходит из строки в PowerShellCore.format.ps1xml, которая определяет значение для Root как DisplayRoot, если оно имеет значение ... в противном случае Root

<TableColumnItem>
    <ScriptBlock>if($_.DisplayRoot -ne $null) { $_.DisplayRoot } else { $_.Root }</ScriptBlock>
</TableColumnItem>

Если выДо сих пор не отставал от меня ..

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

Get-PSDrive | Where-Object {$_.DisplayRoot -like "*SERVER05*" }

Не забудьте использовать звездочки при использовании -like, когда вы пытаетесь выполнить частичное совпадение.В случае сомнений проверьте ваши объекты с помощью списка командлетов Format-List, Get-Member и Select-Object, чтобы увидеть больше информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...