Сопоставьте общий ресурс с неназначенной буквой диска в powershell - PullRequest
3 голосов
/ 10 января 2012

Я подключаю сетевой диск с помощью powershell следующим образом.

$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive("r:", "$Folder","FALSE","Domain\UserName", "Password")

Но здесь я отправляю букву диска как r:. Если диск r: уже используется, произойдет сбой.

Есть ли способ сопоставить диск с неназначенной буквой диска. (Например, если R: уже назначен, а S: - нет, он должен автоматически подключиться к S: drive)

Ответы [ 2 ]

5 голосов
/ 10 января 2012

Сначала вам нужно получить следующую доступную букву диска.Вот пример из архива PowerShell.com :

function Get-NextFreeDrive {
  68..90 | ForEach-Object { "$([char]$_):" } | 
  Where-Object { 'h:', 'k:', 'z:' -notcontains $_  } | 
  Where-Object { 
    (new-object System.IO.DriveInfo $_).DriveType -eq 'noRootdirectory' 
  }
}

из PowerShell.com:

Он начинается с перечисления кодов ASCII для букв D: throughZ :.Затем конвейер преобразует эти коды ASCII в буквы дисков.Затем проверьте, как конвейер использует список исключений с дисками, которые вы не хотите использовать для сопоставления (необязательно).В этом примере буквы дисков h :, k: и z: никогда не используются.Наконец, конвейер использует объект .NET DriveInfo, чтобы проверить, используется ли диск.

$net = new-object -ComObject WScript.Network
$net.MapNetworkDrive((Get-NextFreeDrive)[0], "$Folder","FALSE","Domain\UserName", "Password")
1 голос
/ 14 мая 2014

Мне нравится этот способ по следующим причинам:

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

$share="\\Server\Share"
$drvlist=(Get-PSDrive -PSProvider filesystem).Name
Foreach ($drvletter in "DEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray()) {
    If ($drvlist -notcontains $drvletter) {
        $drv=New-PSDrive -PSProvider filesystem -Name $drvletter -Root $share
        break
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...